是否有适用于YAML的ANTLR4语法?

17

由于YAML具有相对复杂的语法,使用ANTLR4编写解析器以解析YAML是否可行?我正在寻找实现类似YAML缩进解析和数据类型检测的示例。


缩进处理可以在Python语法中找到(https://github.com/antlr/grammars-v4/tree/master/python3)。 - Onur
是的,但我认为YAML的缩进处理与Python相似,但仍然有很大不同。http://yaml.org/spec/1.2/spec.html#id2777534 vs https://docs.python.org/3/reference/lexical_analysis.html#indentation - JE42
Yaml缩进似乎比Python更复杂。乍一看,它似乎可以通过几个词法分析器模式(以应对流样式)和词法分析器操作来实现,将空格转换为“Indent”|“Dedent”标记,因此您不必在解析器中处理空格。 - Onur
1
值得一提的是,github上有一个名为enyaml的ANTLR + .net yaml语法库。虽然我没有使用过它,但一直在考虑fork它并将其移植到Java,然后更改语法以嵌入一些关于我们yaml文档的领域规则到解析器中。当这个工作完成时,我会更新这个问题。 - Groostav
1
据我所知,你可以在手写的词法分析器中处理YAML集合(缩进规则)的块语法。我自己使用这种方法基于ANTLR创建了一个非常基本的YAML解析器在此处。除了自定义的词法分析器(YAMLLexer.cpp)之外,解析器的所有其他部分都使用ANTLR提供的标准设施(输入处理、解析器语法、监听器接口)。 - René Schwaiger
1个回答

2

YAML规范包含BNF语法。请注意,根据该文档,完全正确的YAML是上下文敏感的,并且无法被解析器生成器解析,因此您的语法将需要描述一个上下文无关的超集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接