【问题标题】:difference between Source code parser and Grammar parser源代码解析器和语法解析器之间的区别
【发布时间】:2023-03-08 16:10:01
【问题描述】:

我一直在尝试研究源代码解析器,经常会发现有人在谈论解析语法。

所以我想知道源代码解析器和语法解析器有什么区别,它们是一样的吗?

【问题讨论】:

    标签: parser-generator


    【解决方案1】:

    短语“源代码解析器”本身就很清楚:这是一种解析源文本的机制,使用基于正式语法的解析器生成器引擎或某种手动编码(通常是递归下降) parser 非正式地从语法派生而来。仅从短语中不清楚“源代码解析器”的结果是什么;它可能只是“是的,这是有效的语法”,更常见的是“产生解析或抽象语法树”,或者它可能(草率地)“完整的抽象语法树加上符号表加上控制和数据流分析”。

    “语法解析器”这个短语我遇到的不多(我在这个领域工作了很多)。这可能是来自其他来源的乱码。在没有广为人知的定义的情况下,人们会猜测这意味着 a) 由形式语法的解析器生成引擎驱动的“源代码解析器”,或 b) 解析语法(即也是一种源代码),类似于短语“Fortran parser”。对于后者,我倾向于编写“语法解析器”以避免混淆,尽管“Fortran 解析器”非常清晰。

    您使用了第三个术语,“解析语法”,我也很少遇到。这很可能意味着上一段中的 b)。

    您的条款从何而来?

    【讨论】:

      【解决方案2】:

      Bison is a general purpose parser generator that converts a grammar description for an LALR(1) context-free grammar into a C program to parse that grammar.

      这种说法是不对的。这有3个错误。它应该是:

      Bison 是一个通用的解析器生成器,

      1. 读取一个BNF语法,它定义了上下文无关语言的语法,
      2. 进行 LALR(1) 分析和冲突解决,并且
      3. 输出一个 C 程序,该程序读取用其语法编写的语言编写的输入 在 BNF 语法中定义。

      我的目的不是批评,而是让人们使用正确的术语。
      在这个问题上已经有足够的误解了。

      【讨论】:

      • 人们有时很难掌握词汇,对吧。
      最近更新 更多