gpt4 book ai didi

parsing - YAML 解析 - lex 还是手卷?

转载 作者:行者123 更新时间:2023-12-03 22:09:02 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的 YAML 解析器,我从 yaml.org 阅读了规范,
在我开始之前,我想知道是否最好编写一个手动解析器,或者
使用 lex ( flex/bison )。我看了libyaml (C 库) -
似乎没有使用 lex/yacc .
YAML(不包括流样式),似乎更面向行,所以,是吗
更容易编写手动解析器,或使用 flex/bison谢谢。

最佳答案

这个答案基本上是对以下问题的回答:“我应该推出自己的解析器还是使用解析器生成器?”并且与 YAML 没有太大关系。但无论如何它会“回答”你的问题。
您需要问的问题不是“这是否适用于这种给定的语言/语法”,而是“我是否有信心实现这一点”。事实是,您要解析的大多数格式只能与生成的解析器一起使用。另一个事实是,用简单的手写recursive descent parser 解析复杂的语言也是可行的。 .
我写过一个递归下降解析器,用于 EDDL (C 和结构化元素)和一个用于 INI 的 bison/flex 解析器。我选择了这些例子,因为它们违背直觉,外部要求决定了决定。
既然我在技术层面上建立了它是可能的,你为什么要选择一个?这个问题真的很难回答,这里有一些关于这个主题的想法:

  • 编写一个好的词法分析器真的很难。在大多数情况下,使用 flex 生成词法分析器是有意义的。手动滚动你自己的词法分析器几乎没有用,除非你有非常奇特的输入格式。
  • 使用 bison 或类似的生成器使用于解析的语法显式可见。这里的主要收获是,在五年内维护您的解析器的开发人员将立即看到所使用的语法,并可以将其与任何规范进行比较。
  • 使用递归下降解析器可以很清楚解析器中发生的事情。这提供了优雅地处理哈利冲突的简单方法。您可以编写一个简单的 if,而不是将整个语法重新排列为 LALR1。
  • 在开发解析器时,您可以使用手写解析器“掩盖细节”,而使用 bison 这几乎是不可能的。在野牛中,语法必须有效,否则生成器将不会做任何事情。
  • Bison 非常擅长指出语法中的形式缺陷。不幸的是,您只能独自修复它们。手动滚动解析器时,您只会在解析器读取废话时发现缺陷。

  • 这不是一个或另一个的明确答案,但它为您指明了正确的方向。由于您编写解析器似乎是为了好玩,我认为您应该同时编写两种类型的解析器。

    关于parsing - YAML 解析 - lex 还是手卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476116/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com