Есть ли грамматика ANTLR4 для YAML?

Поскольку YAML имеет довольно сложный синтаксис, можно ли написать парсер для YAML в основном с использованием ANTLR4? Я искал примеры, которые реализуют YAML, такие как синтаксический анализ отступов и обнаружение типов данных.


person JE42    schedule 30.08.2014    source источник
comment
Обработку отступов можно найти в грамматике Python (github.com/antlr/grammars- v4/дерево/мастер/python3).   -  person Onur    schedule 30.08.2014
comment
Да, но я думаю, что обработка отступов в YAML похожа, но все же немного отличается от питонов. yaml.org/spec/1.2/spec.html#id2777534 против docs.python.org/3/reference/lexical_analysis.html#indentation   -  person JE42    schedule 30.08.2014
comment
Идентификация Yaml кажется более сложной, чем в python. На первый взгляд кажется, что это может быть достигнуто с помощью нескольких режимов лексера (чтобы справиться со стилем потока) и действий лексера, которые преобразуют пробелы в токены Indent|Dedent, поэтому вам не нужно иметь дело с пробелами в синтаксическом анализаторе.   -  person Onur    schedule 31.08.2014
comment
Стоит упомянуть репозиторий github enyaml и грамматику ANTLR + .net yaml. Я не использовал его, но обсуждал его разветвление и портирование на java, а затем изменение грамматики, чтобы встроить некоторые правила домена в наших документах yaml внутри синтаксического анализатора. Я обновлю этот вопрос, когда это будет сделано.   -  person Groostav    schedule 05.03.2016
comment
Насколько я могу судить, вы можете обрабатывать синтаксис блоков для коллекций YAML (правила отступов) внутри рукописного лексера. Я сам использовал этот подход для создания очень простого синтаксического анализатора YAML на основе ANTLR здесь< /а>. Помимо пользовательского лексера (YAMLLexer.cpp), все остальные части парсера используют стандартные средства, предоставляемые ANTLR (обработка ввода, грамматика парсера, интерфейс слушателя).   -  person René Schwaiger    schedule 19.07.2018


Ответы (1)


спецификация YAML содержит грамматику BNF. Имейте в виду, что, согласно этому документу, полностью правильный YAML является контекстно-зависимым и не может анализироваться генераторами синтаксических анализаторов, поэтому ваша грамматика должна будет описывать контекстно-свободный надмножество.

person Ari Fordsham    schedule 09.09.2020