двусмысленность Ямла; отступы и пустой узел

Я написал:

a:
-b
-c

Парсер понял это как:

!!map {
  ? !!str "a"
  : !!seq [
      !!str "b",
      !!str "c"
    ]
}

Но я имел в виду:

!!map {
  ? !!str "a"
  : !!null ""
}
!!seq [
  !!str "b",
  !!str "c"
]

В спецификации сказано:

«-», «?» и символы «:», используемые для обозначения записей коллекции блоков, воспринимаются людьми как часть отступа. Это решается в каждом конкретном случае соответствующими производствами.

Значит, оба толкования допустимы? Если нет, можете ли вы указать раздел в спецификации, который препятствует этому?

В зависимости от "от случая к случаю по соответствующим производствам"? Что такое «соответствующие производства»?


person user482745    schedule 21.10.2010    source источник
comment
Какую структуру данных вы ожидаете получить из всего документа?   -  person Andrey    schedule 28.10.2010
comment
Этот вопрос касается воспринимаемой двусмысленности в спецификации yaml. Я ожидал, что код помечен Но я имел в виду. Если бы я добавил пробелы перед -b и -c, все бы нормально разобралось.   -  person user482745    schedule 01.11.2010
comment
Вопросы, на которые необходимо ответить, таковы: Значит, обе интерпретации допустимы? Если нет, можете ли вы указать раздел в спецификации, который препятствует этому? Что такое релевантные производства?   -  person user482745    schedule 01.11.2010


Ответы (2)


Ваш пример не обрабатывается PyYAML 3.11.

http://yaml-online-parser.appspot.com/?yaml=a%3A%0A-b%0A-c&type=json

Попробуй это:

a:
- b
- c

http://yaml-online-parser.appspot.com/?yaml=a%3A%0A-+b%0A-+c&type=json

person Paul Tarjan    schedule 22.07.2011

Попробуй это:

- a: 
- b
- c
%YAML 1.1
---
!!seq [
    !!map {
        ? !!str "a"
        : !!null "null",
    },
    !!str "b",
    !!str "c",
]
...

person Andrey    schedule 27.10.2010