Possible ambiguity in YAML 1.2 when parsing alias nodes
flyx <[email protected]> Sat, 05 Mar 2016 11:44:04 +0100
| Newsgroups | gmane.text.yaml.general |
|---|---|
| Message-ID | <[email protected]> |
Hi folks,
while implementing NimYAML, I found the following ambiguity in the spec:
&a: key: &a value
foo:
*a:
Firstly, ':' is allowed inside an anchor name, because it is not a
c-flow-indicator, so this input is valid. But the last line is
ambiguous. I can parse it as:
s-l+block-node(n,c) ->
s-l+block-in-block(n,c) ->
s-l+block-collection(n,c) ->
l+block-mapping(n) ->
ns-l-block-map-entry(n) ->
ns-l-block-map-implicit-entry(n) ->
ns-s-block-map-implicit-key c-l-block-map-implicit-value(n) ->
ns-s-implicit-yaml-key(c) ":" e-node s-l-comments ->
ns-flow-yaml-node(n,c) ":" "" "" ->
c-ns-alias-node ":" ->
"*" ns-anchor-name ":" ->
"*a" ":" ->
"*a:"
But this is also possible:
s-l+block-node(n,c) ->
s-l+flow-in-block(n) ->
ns-flow-node(n+1,flow-out) s-l-comments ->
c-ns-alias-node "" ->
"*" ns-anchor-name ->
"*a:"
So the node can be either parsed as a map with one entry having "*a" as
key and an empty scalar as value, or as a single alias node "*a:". This
is possible because in
ns-s-implicit-yaml-key(c) ::= ns-flow-yaml-node(n/a,c)
s-separate-in-line?
the s-separate-in-line is optional. Interestingly, a simple "&a:" is not
ambiguous, because the properties must be separate from the scalar
content, even if it is empty. So in order to parse that as implicit key,
it must be written as "&a :".
Am I overlooking something?
Cheers,
Felix
------------------------------------------------------------------------------