1

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

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

4

2 回答 2

1

Bison 是一个通用解析器生成器,可将 LALR(1) 上下文无关文法的文法描述转换为 C 程序以解析该文法。

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

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

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

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

于 2013-06-14T21:48:01.267 回答
1

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

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

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

你的条款从何而来?

于 2013-06-11T03:53:33.940 回答