源代码解析器和语法解析器之间的区别

时间:2013-06-11 02:16:50

标签: parser-generator

我一直在尝试研究源代码解析器,我常常会找人们讨论解析语法。

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

2 个答案:

答案 0 :(得分:1)

短语"源代码解析器"本身很清楚:这是一种解析源文本的机制,使用基于形式语法的解析器生成器引擎或者非正式地从语法派生的某种手动编码(通常是递归下降)解析器。目前还不清楚源代码解析器"的结果是什么?来自这句话;它可能只是"是的,那个有效的语法",更常见的是"产生一个解析或抽象语法树",或者它可能(邋))#34;完整抽象语法树加上符号表加上控制和数据流分析"。

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

你使用了第三个术语,"解析语法"我也不会遇到太多。这可能意味着b)在上一段中。

您的条款来自哪里?

答案 1 :(得分:1)

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语法中定义。
  4. 我的意图不是要批评,而是要让人们使用正确的术语 在这个问题上已经有足够的误解了。