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

Parsing 编译器和解析器之间的区别?,parsing,compiler-construction,Parsing,Compiler Construction,根据概念/功能/实现,编译器和解析器之间的区别是什么?解析器只是将文本读入更抽象的内部表示,通常是某种树或图形 编译器将这种内部表示转换为另一种格式。这通常意味着将源代码转换为可执行程序。但目标不一定是机器代码。它也可以是另一种编程语言;编译器仍然是一个编译器。显然,编译器需要一个解析器来实际读取其输入。a是a的一个元素 您是否在寻找编译器和编译器之间的区别?编译器内部总是有一个解析器。解析器只是处理语言并返回它的树表示,编译器从树、实际的机器代码或其他语言生成一些东西。编译器通常由几个组件组成

根据概念/功能/实现,编译器和解析器之间的区别是什么?

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

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

a是a的一个元素


您是否在寻找编译器和编译器之间的区别?

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

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

  • Lexer-将程序分解为单词
  • 解析器-检查句子的语法是否正确
  • 语义分析-检查句子是否有意义
  • 优化器-编辑句子以简洁明了
  • 代码生成器-使用另一个词汇表输出具有等效语义的内容

补充一点: 正如其他地方提到的,small C是一个递归的体面编译器,在解析时生成代码。基本上,语法分析、语义分析和代码生成一次完成。我记得,它也在解析器中进行了词法分析

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


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

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


解析器是一种软件,当脚本在web服务器上执行时,它会评估脚本的语法。对于web上使用的脚本语言,解析器的工作原理与编译器在其他类型的应用程序开发环境中的工作原理类似。解析器通常用于脚本开发,因为它们可以在执行脚本时对代码进行求值,而不需要先编译代码。

解析器接收原始数据并将其解析为树结构。这个语法树然后被传递到生成器,生成器将把它转换成它应该生成的任何东西


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

一般来说,解析器是编译器的一部分,但编译器的设计目的是将收到的脚本一般转换为机器可读代码,有时转换为另一种语言

冰箱和压缩机的区别是什么?冰箱大量使用压缩机来完成它的工作,但压缩机绝不是冰箱。将编译器替换为refigirator,将解析器替换为compressor。我认为OP的意思是:“编译器和解析器之间的关系是什么?”(大多数答案似乎都涉及到了这一点),但“差异”一词不仅出现在标题中,而且也出现在主体问题中,在这种情况下,Nifle的类比就足够了+注意不同的部分,并提及它们与文本的关系(即使对于一个理论计算机科学家来说,一个完整的程序是一个单词:-)。但是,解析器会检查句子的语法是否正确。词法分析者可能已经查过字典,看看这些词是不是编造出来的,或者确实是正确的。但是这个任务在词法分析器和语法分析器之间有点模糊。语法分析器不仅检查语法,而且检查语法更像是构造抽象表示的副产品,不是吗?我认为是另一种情况:抽象表示可能是检查语法的副产品。解析器不必生成树结构。您有没有一个不生成树的解析器的示例?对于表示任意图形的语言,解析器如何?解析器通常只是将文本内容转换为一些内部表示。后者通常是具有正式定义的上下文无关语法的语言的树,但实际上它可以是任何便于处理的东西。递归的体面解析器不必生成树。是的,但您有具体的示例吗?