我一直在尝试研究源代码解析器,并且经常会发现人们在谈论解析语法。
所以我想知道源代码解析器和语法解析器有什么区别,它们是一样的吗?
Bison 是一个通用解析器生成器,可将 LALR(1) 上下文无关文法的文法描述转换为 C 程序以解析该文法。
这种说法是不对的。这有3个错误。它应该是:
Bison 是一个通用的解析器生成器
我的意图不是批评,而是让人们使用正确的术语。
在这个问题上已经有足够的误解了。
短语“源代码解析器”本身就很清楚了:这是一种解析源文本的机制,使用基于形式语法的解析器生成器引擎或某种手动编码(通常是递归下降)解析器派生自非正式的语法。仅从短语中不清楚“源代码解析器”的结果是什么;它可能只是“是的,这是有效的语法”,更常见的是“产生解析或抽象语法树”,或者它可能(草率地)“完整的抽象语法树加上符号表加上控制和数据流分析”。
“语法分析器”这个短语不是我经常遇到的(我在这个领域做了很多工作)。这可能是来自其他来源的乱码。在没有广为人知的定义的情况下,人们会猜测这意味着 a) 由来自正式语法的解析器生成器引擎驱动的“源代码解析器”,或 b) 解析语法的“源代码解析器”(即也是一种源代码),类似于短语“Fortran parser”。对于后者,我倾向于编写“语法解析器”以避免混淆,尽管“Fortran 解析器”非常清楚。
您使用了第三个术语“解析语法”,我也没有遇到太多。这可能意味着上一段中的 b)。
你的条款从何而来?