我正在尝试编写一个简单的YAML解析器,我从yaml.org读取了规范,
在开始之前,我想知道编写手动解析器是否更好,或者
使用lex
(flex/bison
)。我查看了libyaml
(C库) -
似乎没有使用lex/yacc
。
YAML(不包括流样式)似乎更加面向行,因此,它就是这样
更容易编写手动解析器,或使用flex/bison
感谢。
答案 0 :(得分:3)
这个答案基本上是对这个问题的回答:“我应该使用自己的解析器还是使用解析器生成器?”和YAML没什么关系。但它会“回答”你的问题。
你需要问的问题不是“这是否适用于这种语言/语法”,而是“我是否有信心实现这一点”。问题的真相是,您要解析的大多数格式只能与生成的解析器一起使用。另一个事实是,用简单的手写recursive descent parser来解析复杂的语言是可行的。
我已经写过了EDDL(C和结构化元素)的递归下降解析器和INI的bison / flex解析器。我选择了这些例子,因为它们反对直觉和外部要求决定了决定。
由于我在技术层面建立了可能,为什么你会选择一个而不是另一个?这是一个很难回答的问题,这里有一些关于这个主题的想法:
对于其中一个,这不是一个明确的答案,但它指出了正确的方向。既然看起来你正在编写解析器以获得乐趣,我认为你应该编写两种类型的解析器。