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

------------------------------------------------------------------------------