keyval: Fix and clarify grammar

The grammar has a few issues:

* key-fragment = / [^=,.]* /

  Prose restricts key fragments: they "must be valid QAPI names or
  consist only of decimal digits".  Technically, '' consists only of
  decimal digits.  The code rejects that.  Fix the grammar.

* val          = { / [^,]* / | ',,' }

  Use + instead of *.  Accepts the same language.

* val-no-key   = / [^=,]* /

  The code rejects an empty value.  Fix the grammar.

* Section "Additional syntax for use with an implied key" is
  confusing.  Rewrite it.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20201011073505.1185335-2-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Markus Armbruster 2020-10-11 09:34:59 +02:00 committed by Kevin Wolf
parent 57c98ea9ac
commit fec3331894

View File

@ -16,8 +16,8 @@
* key-vals = [ key-val { ',' key-val } [ ',' ] ]
* key-val = key '=' val
* key = key-fragment { '.' key-fragment }
* key-fragment = / [^=,.]* /
* val = { / [^,]* / | ',,' }
* key-fragment = / [^=,.]+ /
* val = { / [^,]+ / | ',,' }
*
* Semantics defined by reduction to JSON:
*
@ -71,12 +71,16 @@
* Awkward. Note that we carefully restrict alternate types to avoid
* similar ambiguity.
*
* Additional syntax for use with an implied key:
* Alternative syntax for use with an implied key:
*
* key-vals-ik = val-no-key [ ',' key-vals ]
* val-no-key = / [^=,]* /
* key-vals = [ key-val-1st { ',' key-val } [ ',' ] ]
* key-val-1st = val-no-key | key-val
* val-no-key = / [^=,]+ /
*
* where no-key is syntactic sugar for implied-key=val-no-key.
* where val-no-key is syntactic sugar for implied-key=val-no-key.
*
* Note that you can't use the sugared form when the value contains
* '=' or ','.
*/
#include "qemu/osdep.h"