编译方法,,,,1.3编译技术的应用,1.2编译程序,1.1程序设计语言与程序,第1章编译概述,1.1程序设计语言与程序,1.1.2程序设计语言的分类,1.1.3程序及其结构,1.1.4高级语言程序的处理过程,1.1.1程序设计语言的定义,1.1程序设计语言与程序,,,,程序设计语言,语义,语法,1.1.1程序设计语言的定义,1.1程序设计语言与程序,1.1.2程序设计语言的分类,1.1程序设计语言与程序,1.1.3程序及其结构,voidQ()Q的局部数据定义R();Q();,main()Main的局部数据定义,voidR()R的局部数据定义,1.1程序设计语言与程序,1.C语言一个主函数main、若干(可以为0)个子函数1.1.3程序及其结构,1.1程序设计语言与程序,2.Pascal语言,嵌套过程语言特点:程序的过程定义是嵌套的,内层过层由外层过程调用,内层过程执行完毕将返回外层过程允许内层过程引用包围它的任一外层过程说明的变量1.1.3程序及其结构,programA;A的数据说明procedureB(参数表);B的数据说明procedureC(参数表);C的数据说明beginend;beginC;end;,procedureD;D的数据说明beginB;end;beginB;D;end.,1.1程序设计语言与程序,绝对机器代码程序,可再装配的机器代码程序,目标汇编程序,源程序,需预处理的源程序,1.1.4高级语言程序的处理过程,预处理,编译,汇编,装配连接,,,,,1.1程序设计语言与程序,1.2编译程序,1.2.2编译过程和编译程序的结构,1.2.3编译程序的生成,1.2.4编译程序与程序设计环境,1.2.1编译与解释,1.2编译程序,,,,编译程序,源程序,目标程序,错误信息,高级语言程序的翻译方式:解释、编译编译:将高级语言程序翻译成另一种语言的等价程序。
源程序、目标程序和编译程序的关系:,1.2.1编译与解释,1.2编译程序,解释:翻译一句执行一句,边翻译边执行,直到程序结束与编译的区别:不生成等价的目标代码程序优点:解释方式便于程序的调试编译方式只需翻译一次,且目标程序的执行速度快),1.2.1编译与解释,1.2编译程序,词法分析,语义分析和中间代码生成,目标代码生成,目标程序,代码优化,语法分析,源程序,,,出错处理,表格管理,,,,,,,,,,,1.2.2编译过程和编译程序的结构,1.2编译程序,1.编译过程,主要任务:从左到右扫描源程序,逐一读入构成源程序的字符流,识别出其中的一个个单词,识别出的单词称单词符号,也简称符号单词是高级语言程序中有实际意义的最小语法单位单词构成规则词法规则或构词法(单词识别的依据)单词内码形式二元式(指出了单词的类别和自身值),1.2.2编译过程和编译程序的结构,(1)词法分析,1.2编译程序,(1)(标识符,z)(2)(等号,=)(3)(标识符,x)(4)(加号,+)(5)(标识符,a)(6)(取余号,%)(7)(整数,3)(8)(乘号,*)(9)(左括号,()(10)(保留字,int)(11)(右括号,)),(12)(左括号,()(13)(标识符,x)(14)(加号,+)(15)(标识符,y)(16)(右括号,))(17)(取余号,%)(18)(整数,2)(19)(除号,/)(20)(整数7)(21)(分号;),例:z=x+a%3*(int)(x+y)%2/7;,1.2.2编译过程和编译程序的结构,1.2编译程序,任务“组词成句”,根据单词分析出组成源程序的各类语法单位,并指出其中的语法错误。
语法单位由源程序的单词构成(如表达式、语句、乃至整个程序语法单位的构成规则语法规则一个语言的词法规则和语法规则定义了一个程序的形式结构语法单位的表示语法树,(2)语法分析,1.2.2编译过程和编译程序的结构,1.2编译程序,例:z=x+a%3*y,1.2.2编译过程和编译程序的结构,1.2编译程序,任务:分析出语法单位具体的动作意义,进行初步翻译,生成与源程序等价的中间代码程序语义:定义一个程序所表示的意义,用语义规则描述中间代码:指令应结构简单、含义明确,易于实现源程序中间代码目标代码三者之间的转换中间代码常用形式:逆波兰式、三元式、四元式等四元式:(运算符,对象1,对象2,结果),例:z=x+a%3*y(1)(%a3t1)(2)(*t1yt2)(3)(+xt2t3)(4)(=t3_z),(3)语义分析和中间代码生成,1.2.2编译过程和编译程序的结构,1.2编译程序,,任务:对中间代码进行等价的加工变换,以便生成更有效更节省时间和空间的目标代码例:z=x+a%3*y的四元式序列:(1)(%a3t1)(2)(*t1yt2)(3)(+xt2z)代码优化的技术:删除公共子表达式、强度削弱、代码外提、合并已知量....注:此阶段并非编译程序所必需。
1)(%a3t1)(2)(*t1yt2)(3)(+xt2t3)(4)(=t3_z),,(4)代码优化,1.2.2编译过程和编译程序的结构,1.2编译程序,任务:将中间代码程序变换成目标代码程序目标代码:特定机器上的绝对指令代码可重定位的指令代码汇编指令代码这一阶段任务的实现与硬件系统的结构、目标指令的选择、变量存储空间的分配、寄存器、后缓寄存器的调度等均有关系5)目标代码生成,1.2.2编译过程和编译程序的结构,1.2编译程序,表格管理:为完成编译而建立并使用一些表格,以记录各种信息信息登录:编译的各个阶段(尤其是词法语法、语义分析阶段)信息使用:各阶段的分析和翻译出错处理:若编译过程中发现源程序有错误,就应进行出错处理6)表格管理和出错处理,涉及编译的每个阶段!,遍布编译的每个阶段!,1.2.2编译过程和编译程序的结构,1.2编译程序,以上为编译过程的典型的处理模式并非所有的编译过程都有这些阶段可以不生成中间代码、不进行代码优化)常将编译的这五个阶段划分成两大部分:前三个阶段分析部分后两个阶段综合部分,说明:,1.2.2编译过程和编译程序的结构,1.2编译程序,词法分析程序,语义分析和中间代码生成程序,目标代码生成程序,目标程序,代码优化程序,语法分析程序,源程序,,,出错处理程序,表格管理程序,,,,,,,,,,,1.2.2编译过程和编译程序的结构,1.2编译程序,1.编译程序结构,后端程序:由与源语言无关,与中间代码有关,主要依赖于目标机的工作组合而成。
与目标机有关的代码优化、目标代码生成、相关的表格管理和出错处理等前端程序:由那些主要依赖于源语言,而与目标机无关的工作组合而成词法分析、语法分析、语义分析与中间代码生成、某些目标机器无关的代码优化,以及此间的表格管理、和出错处理等),1.“前后端”组合方式,1.2.2编译过程和编译程序的结构,1.2编译程序,作用:,1.2.2编译过程和编译程序的结构,1.2编译程序,“遍”:对源程序或等价的中间语言程序从头到尾扫描,完成规定的任务,并生成新的中间结果或目标程序,称一“遍”在一“遍”中可完成编译的一个或多个阶段的任务源语言的特征和机器的特征决定编译程序究竟可以划分成几“遍”2按“遍”组合方式,1.2.2编译过程和编译程序的结构,1.2编译程序,第二遍,第一遍,第三遍,1.2.2编译过程和编译程序的结构,1.2编译程序,PDP11C编译程序结构,编译程序的构造与三个方面有关源语言结构、含义和用途等是准确描述语言、构造编译程序的出发点目标语言结构、指令系统、存储分配方式、外设管理方式、文件管理方法等是编译过程中应考虑的问题编译方法翻译的具体方法由源语言特性、目标语言特性、对编译程序性能要求等决定。
1.2.3编译程序的生成,1.2编译程序,1用机器语言编写复杂,不实用2汇编语言编写对具体的硬件环境的依赖性较高,程序过长,也不常用但有些编译程序的核心部分常用汇编语言编写3其他高级语言编写最方便、最常用1.2.3编译程序的生成,1.2编译程序,目标程序,CB,CA,,,,,例:某机器已有A语言的编译程序CA,构造B语言的编译程序CB的过程为:,1.2.3编译程序的生成,1.2编译程序,L0,4采用自展技术构造“自编译”,用被编译的语言来书写该语言自身的编译程序1.2.3编译程序的生成,1.2编译程序,5编译工具自动生成,词法分析程序的生成系统LEX语法分析程序的生成系统YACC,1.2.3编译程序的生成,1.2编译程序,例:C语言的集成开发环境VisualC++,用户界面,硬件系统,操作系统,,1.2.4编译程序与程序设计环境,1.2编译程序,1语言的结构化编辑器2查询解释器3硅编译器,1.3编译技术的应用,1.3编译技术的应用,ThankYou!,。