YAML 有 ANTLR4 语法吗?

Posted

技术标签:

【中文标题】YAML 有 ANTLR4 语法吗?【英文标题】:Is there an ANTLR4 grammar for YAML? 【发布时间】:2014-10-24 03:33:12 【问题描述】:

由于 YAML 的语法相当复杂,是否可以主要使用 ANTLR4 为 YAML 编写解析器? 我一直在寻找实现 YAML 的示例,例如缩进解析和数据类型检测。

【问题讨论】:

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

YAML specification 包含 BNF 语法。请记住,根据本文档,完全正确的 YAML 是上下文相关的,并且无法被解析器生成器解析,因此您的语法必须描述一个上下文无关的超集。

【讨论】:

以上是关于YAML 有 ANTLR4 语法吗?的主要内容,如果未能解决你的问题,请参考以下文章

ANTLR4 词法分析器规则在 perl 语法上产生错误或冲突

Antlr4,如何报告特定的语法错误

使用golang+antlr4构建一个自己的语言解析器(完结篇)

ANTLR4 如何编写语法文件之语法结构

ANTLR4 如何编写语法文件之语法结构

ANTLR4入门:使用mave ANTLR4插件(antlr4-maven-plugin)执行语法解析生成器