首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 系统运维 >

编译原理学习(一)编译概述

2012-12-17 
编译原理学习(1)编译概述编译原理学习一:编译概述1.1两种语言处理器程序设计语言是向人以及计算机描述计算

编译原理学习(1)编译概述
编译原理学习一:编译概述

                  1.1两种语言处理器

                 程序设计语言是向人以及计算机描述计算过程的记号。一个程序可以运行之前,它首先需要被翻译成一种能够被计算机执行的方式。完成这项翻译工作的软件系统成为编译器(complier)。

                 一个编译器是一个程序,它将一种语言翻译成另一种语言。

                  解释器(interpreter)是另一种常见的语言处理器,直接利用用户提供的员程序指定操作。由编译器产生的机器语言比解释器产生的机器语言快,但是解释器的错误诊断效果通常比编译器好。

                 编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)。

        1.2编译器的结构

        词法分析——>语法分析——>语义分析——>代码优化——>目标生成。

        编译原理学习(一)编译概述

        分析(analysis)部分,又称编译器前端,把源程序分解成多个组成要素。

        综合(synthesis)部分,编译器后端,根据中间表示和符号表中的信息来构成目标程序。

        编译器前端:编译器前端(frontend),前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a = b ; + c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

                编译器后端:编译器后端(backend)编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code           Generation)。

                1.3程序设计语言

                在计算机发展初期,人们直接使用机器语言来编写程序。为了便于记忆,人们用比较直观地符号来代替机器指令,进一步发展成汇编语言。但是汇编语言太依赖于机器,对问题的描述出于机器指令,使用仍不方便,程序设计的效率仍然很低。为了解决这些问题,提高编程效率,人们又发展出了更接近自然语言的高级程序设计语言。

                1.4编译程序的结构

                单遍编译程序只对源程序进行一次扫描,就完成编译程序,产生代码。在单遍编译程序中不产生中间代码,往往以语法分析程序为中心,词法分析和语义分析作为语法分析的子程序。

               多遍编译程序把编译程序把任务分成几段来进行,每遍只完成部分任务。

               编译程序是否分遍,如何分遍,要根据计算机内存大小,源程序语言的复杂性和目标程序质量来定。分遍与单遍各有优点,各有缺点。


               参考知识:《编译原理及实现》,《编译原理》,
                                 http://space.189works.com/home-space-uid-10298432-do-blog-id-59710.html,
                                 http://www.cnblogs.com/zihuatanejo/articles/1390600.html

热点排行