Parser generator 源代码解析器和语法解析器的区别

Parser generator 源代码解析器和语法解析器的区别,parser-generator,Parser Generator,我一直在努力研究源代码解析器,经常会发现人们在谈论解析语法 所以我想知道源代码解析器和语法解析器之间的区别是什么,它们是相同的吗?短语“源代码解析器”本身就很清楚:这是一种解析源文本的机制,使用基于正式语法的解析器生成器引擎或某种手工编码的解析器生成器引擎(通常是递归下降)非正式地从语法派生的解析器。不清楚“源代码解析器”的结果仅仅来自短语;它可能只是“是的,这是有效语法”,更常见的是“生成解析或抽象语法树”,也可能是(草率地)“完整抽象语法树+符号表+控制和数据流分析” 短语“语法分析器”不是

我一直在努力研究源代码解析器,经常会发现人们在谈论解析语法

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

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

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

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

你的术语来自哪里?

这种说法是不对的。这里面有三个错误。应改为:

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

  • 读取BNF语法,该语法定义上下文无关语言的语法
  • 进行LALR(1)分析和冲突解决,以及
  • 输出一个C程序,该程序读取用其语法的语言编写的输入 在BNF语法中定义 我的目的不是批评,而是让人们使用正确的术语。

    在这个问题上已经有足够多的误解了

    人们有时很难咀嚼词汇,对吧。