编译器的工作原理
2个回答
展开全部
编译 是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,
所以我们电脑上的文件都是经过编译后的文件。
2017-05-06
展开全部
为了将二进制数字语言转换成了方便记忆的符号语言,以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,于是诞生了编译器。
在1954年至1957年期间,Noam Chomsky开始了他的自然语言结构的研究。Chomsky的研究导致了根据grammar 的难易程度以及识别它们所需的算法来为语言分类,包括了文法的4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法(context-free grammar ))被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。
在20世纪60年代和70年代,分析问题( parsing problem ,用于限定上下文无关语言的识别的有效算法)的研究是,它相当完善地解决了这一问题, 现在它已是编译理论的一个标准部分。它们与3型文法相对应,并且引出了表示程序设计语言的单词(或称为记号)的符号方式。程序设计语言的语义通常是由自然语言描述的,这些描述(与形式的词法及语法结构一起)一般是集中在一个语言参考手册或语言定义之中。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。编译器的编写者掌握的技术对于语言的定义有很大的影响,一种语言的定义对于构造编译器所需的技术也有很 大的关系。
在理想情况下,编译器被严格地分成分析和综合两部分:扫描程序、分析程序和语义分析程序是前端,代码生成器是后端。
扫描程序、分析程序将汇编符号输入到表格中的语义分析程序;语义分析程序将增加数据类型和其他信息;优化阶段和代码生成阶段也将利用由符号表提供的信息选 出恰当的代码。
在1954年至1957年期间,Noam Chomsky开始了他的自然语言结构的研究。Chomsky的研究导致了根据grammar 的难易程度以及识别它们所需的算法来为语言分类,包括了文法的4个层次:0型、1型、2型和3型文法,且其中的每一个都是其前者的专门化。2型(或上下文无关文法(context-free grammar ))被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。
在20世纪60年代和70年代,分析问题( parsing problem ,用于限定上下文无关语言的识别的有效算法)的研究是,它相当完善地解决了这一问题, 现在它已是编译理论的一个标准部分。它们与3型文法相对应,并且引出了表示程序设计语言的单词(或称为记号)的符号方式。程序设计语言的语义通常是由自然语言描述的,这些描述(与形式的词法及语法结构一起)一般是集中在一个语言参考手册或语言定义之中。
人们接着又深化了生成有效的目标代码的方法,这就是最初的编译器,它们被一直使用至今。编译器的编写者掌握的技术对于语言的定义有很大的影响,一种语言的定义对于构造编译器所需的技术也有很 大的关系。
在理想情况下,编译器被严格地分成分析和综合两部分:扫描程序、分析程序和语义分析程序是前端,代码生成器是后端。
扫描程序、分析程序将汇编符号输入到表格中的语义分析程序;语义分析程序将增加数据类型和其他信息;优化阶段和代码生成阶段也将利用由符号表提供的信息选 出恰当的代码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询