【发布时间】:2011-09-19 19:18:28
【问题描述】:
我正在尝试编写一个简单的 YAML 解析器,我从 yaml.org 阅读了规范,
在开始之前,我想知道编写手动解析器是否更好,或者
使用lex (flex/bison)。我查看了libyaml(C 库)-
似乎没有使用lex/yacc。
YAML(不包括流样式),似乎更面向行,所以,是吗
更容易编写手动解析器,或使用flex/bison
谢谢。
【问题讨论】:
-
您是否考虑过只使用标准的、现成的 YAML 解析器?或者您是否特别有兴趣构建自己的?另外,请注意
lex和flex是扫描器生成器,而不是解析器生成器;要进行解析,您需要使用yacc或bison。 -
@templatetypedef 我有兴趣构建自己的。
-
@templatetypedef 我可能没有把我的问题说清楚。我知道
lex只是一个标记器。我想知道 YAML 的结构是否更适合flex/bison或手动解析器 -
我应该警告 flex/bison 无法解析 YAML。 YAML1.2 有超过 200 条语法规则,其中大多数都需要缩进匹配,而这几乎不可能用 flex 标记器正确实现(特别是,即使使用复杂的 flex hack,也无法匹配多个 de-dents)。您需要一个遵守缩进规则的标记器。如果我可以推荐一个:RE/flex 包括YAML1.2 tokenizer and parser example。
标签: parsing yaml bison lex flex-lexer