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

时间:2009-12-17 12:36:03

标签: parsing compiler-construction

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

7 个答案:

答案 0 :(得分:43)

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

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

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

parsercompiler的一个元素。

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

解析器将原始数据和parses接收到树结构中。然后将此语法树传递给生成器,生成器将把它变成它应该生成的任何内容。

因此,解析器是编译器的一部分。

答案 5 :(得分:0)

通常,解析器是编译器的一部分,但编译器旨在将接收到的脚本一般转换为机器可读代码或有时转换为另一种语言。

答案 6 :(得分:-2)

编译器是一种特殊类型的计算机程序,它将人类可读的文本文件转换为计算机可以更容易理解的形式。在最基本的层面上,计算机只能理解两个事物,即1和0.在这个层面上,人类将非常缓慢地操作并且发现包含在1和0的长串中的信息是不可理解的。编译器是弥补这一差距的计算机程序。

解析器是一种软件,用于在Web服务器上执行脚本时评估脚本的语法。对于Web上使用的脚本语言,解析器的工作方式类似于编译器可能在其他类型的应用程序开发环境中工作。解析器通常用于脚本开发,因为它们可以在脚本执行时评估代码并且不需要编译代码第一