编译器和解析器之间的区别?

Dha*_*ana 20 compiler-construction parsing

通过概念/功能/实现,编译器和解析器之间有什么区别?

Ric*_*ton 46

编译器通常由几个组件组成,其中一个组件是解析器.编译器中的一组通用组件是:

  • Lexer - 将程序分解为单词.
  • 解析器 - 检查句子的语法是否正确.
  • 语义分析 - 检查句子是否有意义.
  • 优化器 - 为简洁起见编辑句子.
  • 代码生成器 - 使用另一个词汇表输出具有相同语义的东西.
    添加一点:

正如其他地方所提到的,小C是一个递归的正常编译器,它在解析时生成代码.基本上是语法分析,语义分析和代码生成.我记得,它也解析了解析器.

很久以前,我编写了一个C编译器(实际上有几个:用于微控制器的Introl-C系列),它在解析过程中使用了递归代码并进行了语法和语义检查,并生成了生成代码的程序的树形表示.

今天,我正在开发一个源代码 - >令牌 - > AST - > IR - >代码的编译器,就像我上面描述的那样.

  • +1 用于注意不同的部分并提及它们与文本的关系(即使对于理论计算机科学家来说,完整的程序只是一个词:-))。 (2认同)

Joe*_*oey 6

解析器只是将文本读入内部的、更抽象的表示形式,通常是某种树或图。

编译器将这种内部表示形式转换为另一种格式。大多数情况下,这意味着将源代码转换为可执行程序。但目标不一定是机器代码。它也可以是另一种编程语言;编译器仍然是编译器。显然,编译器需要解析器来实际读取其输入。


Chr*_*isF 5

解析器是编译器一个元素。

您是否正在寻找解释器和编译器之间的差异?


vav*_*ava 5

编译器内部总是有一个解析器。解析器只是处理语言并返回它的树表示,编译器从该树、实际机器代码或其他语言生成一些东西。