《课程概述第一章 引论.ppt》由会员分享,可在线阅读,更多相关《课程概述第一章 引论.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程概述课程概述第一章第一章 引论引论程程 序序 设设 计计 语语 言言 2023/5/171Ch1.引论计算机树计算机树-计算机知识结构新视图计算机知识结构新视图n从从计计算算机机应应用用的的角角度度来来观观察察计计算算机机,可可以以把把现现代代计计算算机机知知识识形形象象地地看看成成一一棵棵生生长长在在土土壤壤中中的的大树。大树。n树的果实树的果实:各种计算机应用系统。:各种计算机应用系统。n树干树干:各种软硬件应用平台。:各种软硬件应用平台。n树树根根:计计算算机机设设计计、应应用用技技术术。主主要要包包括括:操操作作系系统统、程程序序设设计计、数数据据库库技技术术、多多媒媒体体技技术术
2、、网网络络技技术术、计计算算机机体体系系结结构构等等内内容容。每每种种技技术术又又包包括它的各种网状分支。括它的各种网状分支。n土土壤壤:是是基基本本理理论论。主主要要包包括括:微微电电子子学学、逻逻辑辑电电路路、离离散散数数学学、逻逻辑辑代代数数、数数据据结结构构、算算法法、编译原理编译原理、图形、图形(像像)学、人文科学等。学、人文科学等。22023/5/173Ch1.引论编译原理在计算机学科中的地位编译原理在计算机学科中的地位n人人类类相相互互之之间间通通过过语语言言进进行行交交流流,人人与与计计算算机机之间也通过语言进行交流。之间也通过语言进行交流。n编编译译原原理理所所讨讨论论的的问
3、问题题,就就是是如如何何把把符符合合人人类类思思维维方方式式的的、用用文文字字描描述述的的意意思思(源源程程序序)翻翻译译成成计计算算机机能能够够理理解解和和执执行行的的形形式式(目目标标程程序序)。n具具体体实实现现从从源源程程序序到到目目标标程程序序转转换换的的程程序序,被被称作称作编译程序或编译器编译程序或编译器。n编编译译程程序序(Compiler)Compiler)是是计计算算机机的的重重要要系系统统软软件件,是高级程序设计语言的支撑基础。是高级程序设计语言的支撑基础。2023/5/174课程概述编译技术编译技术n计计算算机机语语言言之之所所以以能能由由单单一一的的机机器器语语言言发
4、发展展到到现现今今的的数数千千种种计计算算机机高高级级语语言言,就就是是因因为为有有了了编译技术。编译技术。n编编译译技技术术是是计计算算机机科科学学中中发发展展得得最最迅迅速速、最最成成熟熟的的一一个个分分支支,它它集集中中体体现现了了计计算算机机发发展展的的成成果果与与精精华华。其其基基本本原原理理和和技技术术也也适适用用于于一一般般软软件件的的设设计计与与实实现现,而而且且已已经经在在软软件件工工程程、软软件件自自动动化化、逆逆向向软软件件工工程程、再再造造软软件件工工程程等等领领域域有着广泛的应用。有着广泛的应用。2023/5/175课程概述编译原理课程性质编译原理课程性质n编编译译原
5、原理理课课程程系系统统地地介介绍绍设设计计和和构构造造编编译译程程序序的基本原理、方法和技术。的基本原理、方法和技术。n编编译译原原理理课课程程是是计计算算机机专专业业核核心心课课程程,主主干干课课程程,重重要要专专业业基基础础课课程程,考考研研专专业业课课程程。被被列列入入国国际际ACMACM教教程程和和IEEEIEEE计计算算机机学学科科的的正正式式主主干干课课程程,这这充充分分体体现现了了其其在在计计算算机机科科学学中中的的地地位位和作用。和作用。n本本课课程程主主要要学学习习编编译译程程序序的的内内部部结结构构、工工作作过过程程,编编译译程程序序构构造造的的一一般般原原理理,基基本本设
6、设计计方方法法和主要实现技术和主要实现技术。6课程内容课程内容n理解描述源语言理解描述源语言n结构结构(语法语法)Ch2.n含义含义(语义语义)Ch2.高级语言源程序n对目标程序的综合对目标程序的综合n中间代码产生中间代码产生 Ch7.n代码优化代码优化 Ch10.n代码生成代码生成 Ch11.实现时:实现时:使用符号表使用符号表 ch8.考虑运行环境考虑运行环境ch9.考虑出错处理考虑出错处理目标语言目标语言目标程序目标程序(机器语言、(机器语言、汇编语言)汇编语言)高级语言高级语言源程序源程序翻译翻译编译程序编译程序翻译程序翻译程序-n对源程序的分析对源程序的分析n词法分析词法分析 Ch3
7、.n语法分析语法分析 Ch4.5.n语义分析语义分析 Ch6.7.n掌掌握握目目标标指指令令的的功功能能特特点点,目目标标机机硬硬件件结结构构功功能能,操操作作系统功能系统功能,等等7课程比较难课程比较难n编编译译原原理理是是一一门门理理论论与与实实践践并并重重的的课课程程,涉涉及及计计算算机机基基础础、计计算算机机专专业业知知识识比比较较多多,带带有有一一定的定的综合性综合性。n先先导导课课程程是是汇汇编编语语言言程程序序设设计计、计计算算机机组组成成原原理理、数数据据结结构构、高高级级语语言言程程序序设设计计和和离离散散数数学学等等,也也涉涉及及软软件件工工程程的的思思想想及及方方法法、操
8、操作作系系统统等的应用。等的应用。n一一些些概概念念较较抽抽象象,难难理理解解;设设计计和和构构造造编编译译程程序的理论基础是形式语言理论和自动机理论。序的理论基础是形式语言理论和自动机理论。n一些一些方法方法人工构造复杂烦琐,难掌握。人工构造复杂烦琐,难掌握。n时间紧任务重。时间紧任务重。8学习方法学习方法-啃啃n讲讲重重点点内内容容,讲讲主主要要内内容容,详详细细讲讲解解重重点点和和难点内容,多举例。难点内容,多举例。n多多读读书书多多思思考考,遇遇上上问问题题及及时时解解决决问问题题,理理解解并并掌掌握握基基本本概概念念,掌掌握握基基本本方方法法,清清楚楚全全书脉络以及各章的关系。书脉络
9、以及各章的关系。n多多练练习习多多实实践践,注注意意复复习习预预习习,在在阅阅读读理理解解的基础上做好习题和上机作业。的基础上做好习题和上机作业。n请随时提出你们的建议、意见和要求。请随时提出你们的建议、意见和要求。2023/5/179课程概述实验、成绩评定实验、成绩评定n上机实验(三个实验)上机实验(三个实验)编制调试小语言的:编制调试小语言的:n 词法分析程序词法分析程序n 语法分析程序语法分析程序n 语义分析产生中间代码的程序语义分析产生中间代码的程序n成绩评定成绩评定n理论考核理论考核 70%70%n考勤考勤 10%10%n作业作业 10%10%n上机实验上机实验 10%10%2023
10、/5/1710课程概述课程参考书课程参考书n编编译译原原理理及及其其习习题题解解答答,何何炎炎祥祥等等,武武汉汉大大学学出版社,出版社,20042004n编译方法编译方法,马知行等,机械工业出版社,马知行等,机械工业出版社,20042004n编编译译原原理理,蒋蒋立立源源,西西北北工工业业大大学学出出版版社社,20012001n编译原理编译原理,陈英,北京理工大学出版社,陈英,北京理工大学出版社,20012001n编译原理编译原理,吕映芝,清华大学出版社,吕映芝,清华大学出版社,19981998n编编译译原原理理与与技技术术,陈陈意意云云,(合合肥肥)中中国国科科学学技术大学出版社,技术大学出
11、版社,19971997n编编译译原原理理课课程程辅辅导导与与习习题题解解析析,胡胡元元义义,人人民民邮电出版社,邮电出版社,2002200211CH.1 CH.1 引论引论n了解和理解了解和理解:1.1 1.1 编译的概念编译的概念1.2 1.2 编译的过程,编译的过程,编译过程各个阶段的任务编译过程各个阶段的任务1.3 1.3 编译程序的结构,编译程序的结构,各个程序模块功能各个程序模块功能 编译的组合:遍,编译前端和后端编译的组合:遍,编译前端和后端1.4 1.4 编译程序与程序设计环境编译程序与程序设计环境1.5 1.5 编译程序的生成技术:编译程序的生成技术:自展,移植,交叉自展,移植
12、,交叉编译、自动化编译、自动化2023/5/1712Ch1.引论1.1 1.1 什么是编译程序什么是编译程序编编译译程程序序:是是一一个个语语言言翻翻译译程程序序,是是将将用用高高级级语语言言书书写写的的源源程程序序翻翻译译成成等等价价的的低低级级语言目标程序的翻译程序。语言目标程序的翻译程序。C,Pascal,Fortran等等机器语言,汇编语言机器语言,汇编语言解解释释程程序序是是这这样样的的翻翻译译程程序序:它它以以该该语语言言写写的的源源程程序序作作为为输输入入,但但不不产产生生目目标标程程序序,而是边解释边执行源程序本身。而是边解释边执行源程序本身。13编译方式编译方式:源程序源程序
13、目标程序目标程序结结 果果系统子程序系统子程序(编译即翻译编译即翻译)初始数据初始数据编译程序编译程序(运行运行)解释程序解释程序运行结果运行结果源程序源程序(边翻译边执行边翻译边执行)解释方式解释方式:2023/5/1714Ch1.引论一些术语一些术语 1.1.宿主机宿主机:运行编译程序的机器:运行编译程序的机器 2.2.目标机目标机:运行编译程序生成的目标程序的机器:运行编译程序生成的目标程序的机器 3.3.常常用用 表表示示一一个个编编译译程程序序,其其中中,A A表表示示宿宿主主机语言,机语言,L L表示源语言,表示源语言,B B表示目标机语言。表示目标机语言。4.4.诊断编译程序诊断
14、编译程序:专门用于帮助程序开发和调试专门用于帮助程序开发和调试 5.5.优化编译程序优化编译程序:着重于提高目标代码效率:着重于提高目标代码效率 6.6.交叉编译程序交叉编译程序:产生不同于其宿主机的机器代码产生不同于其宿主机的机器代码 7.7.可可变变目目标标编编译译程程序序:不不需需要要重重写写编编译译程程序序中中与与机机器器无关的部分就能改变目标机无关的部分就能改变目标机A AL,BL,B151.2 1.2 编译过程概述编译过程概述n一一个个编编译译程程序序的的整整个个工工作作过过程程是是划划分分成成阶阶段段进进行行的的,每每个个阶阶段段将将源源程程序序从从一一种种表表示示形形式式转换成
15、另一种表示形式。转换成另一种表示形式。n编编译译阶阶段段的的典典型型划划分分方方法法:词词法法分分析析、语语法法分分析析、语语义义分分析析产产生生中中间间代代码码、代代码码优优化化、代码生成代码生成五个基本阶段。五个基本阶段。n掌掌握握编编译译过过程程的的五五个个基基本本阶阶段段,是是我我们们学学习习编译原理课程的基本内容。编译原理课程的基本内容。n学学习习时时应应理理解解各各个个阶阶段段的的任任务务、输输入入、输输出出、依循的规则、采用的方法、涉及的概念依循的规则、采用的方法、涉及的概念。16英译与编译的比较(五个阶段)英译与编译的比较(五个阶段)1.1.识识别别出出句句子子中中的的一一个个
16、个个单词单词2.2.分析句子的语法结构分析句子的语法结构3.3.初步翻译句子的含意初步翻译句子的含意4.4.译文修饰译文修饰5.5.写出最后译文写出最后译文1.1.词法分析词法分析2.2.语法分析语法分析3.3.语语义义分分析析中中间间代代码生成码生成4.4.优化优化5.5.目标代码生成目标代码生成2023/5/1717Ch1.引论词法分析词法分析:编译过程第一个阶段编译过程第一个阶段n任任务务:从从左左到到右右一一个个字字符符一一个个字字符符地地读读入入源源程程序序,对对构构成成源源程程序序的的字字符符流流进进行行扫扫描描和和分分解解,从从而而识识别别出一个个出一个个单词单词(也称单词符号,
17、或简称符号)也称单词符号,或简称符号)。逻辑上紧密相连的一组字符,这些字逻辑上紧密相连的一组字符,这些字符具有集体含义。符具有集体含义。n单词单词:标识符,保留字,算符,界符,常数等:标识符,保留字,算符,界符,常数等n在在词词法法分分析析阶阶段段工工作作所所依依循循的的是是语语言言的的词词法法规规则则。描描述述词词法法规规则则的的有有效效工工具具是是正正规规式式和和有限自动机有限自动机。18词法分析:识别单词符号词法分析:识别单词符号例:例:begin begin varvar sum,first,count:real;sum,first,count:real;sum:=first+coun
18、t*10 sum:=first+count*10 end.end.保留字保留字标识符标识符运算符运算符界符界符常数常数用用id1,id2id1,id2和和id3id3分分别别表表示示sumsum,firstfirst和和countcount三三个个标标识识符符的的内内部部形形式式,经经过过词词法法分分析析,上上述述赋赋值值语语句句变变为为:id1:=id2+id3*1019语法分析语法分析:编译过程第二个阶段编译过程第二个阶段n任任务务:在在词词法法分分析析的的基基础础上上,根根据据语语言言的的语语法法规规则则,把把单单词词符符号号分分解解成成各各类类语语法法单单位位(语语法法范范畴畴),如如
19、“短短语语”、“句句子子”、“子句子句”、“程序段程序段”等。等。n语语法法分分析析的的依依据据是是语语言言的的语语法法规规则则,即即描描述述程程序序结结构构的的规规则则,通通过过语语法法分分析析确确定定整整个个输输入入串串是是否否构构成成一一个个语语法法上上正正确确的的程程序序。程程序序的结构通常是由递规规则表示的。的结构通常是由递规规则表示的。n语法规则通常用语法规则通常用上下文无关文法上下文无关文法描述。描述。n语法分析方法有语法分析方法有自上而下自上而下和和自下而上自下而上两类。两类。20语法分析:语法规则语法分析:语法规则例:例:id1:=id2+id3*10id1:=id2+id3
20、*10 (即即 sum:=first+count*10;)sum:=first+count*10;)赋值语句的语法规则:赋值语句的语法规则::=:=:=:=:=:=+:=:=*:=(:=():=:=:=:=:=:=,是语是语法单位。法单位。2023/5/1721Ch1.引论赋值语句赋值语句标识符标识符 :=表达式表达式表达式表达式 +表达式表达式表达式表达式 *表达式表达式标识符标识符id2(first)标识符标识符id3(count)整数(整数(10)id1(sum)例:语法树例:语法树 sum:=first+count*10sum:=first+count*10 id1:=id2+id3*
21、10语法分析:语法树语法分析:语法树2023/5/1722Ch1.引论语义分析与中间代码的产生:编语义分析与中间代码的产生:编译过程的第三个阶段译过程的第三个阶段n任任务务:首首先先对对各各种种语语法法范范畴畴进进行行静静态态语语义义检检查查,如如果果正正确确则则进进行行中中间间代代码码的的翻翻译。译。n静静态态语语义义检检查查是是进进行行类类型型审审查查,审审查查每每个个算算符符是是否否具具有有语语言言规规范范允允许许的的运运算算对对象象,审审查查源源程程序序有有无无语语义义错错误误,为为代代码码生成阶段收集类型信息。生成阶段收集类型信息。n通常使用通常使用属性文法属性文法描述语义规则。描述
22、语义规则。2023/5/1723Ch1.引论中间代码中间代码n所所谓谓“中中间间代代码码”是是一一种种结结构构简简单单、含含义明确,便于处理的义明确,便于处理的记号系统记号系统。n它是源程序的一种内部表示形式。它是源程序的一种内部表示形式。n设设计计中中间间代代码码的的原原则则:一一是是容容易易生生成成,二是容易翻译成目标代码。二是容易翻译成目标代码。n常常用用的的中中间间代代码码有有三三地地址址码码、四四元元式式、三三元元式式、间间接接三三元元式式、逆逆波波兰兰表表示示(后后缀式)、树形表示等。缀式)、树形表示等。2023/5/1724Ch1.引论中间代码:四元式中间代码:四元式例:例:id
23、1:=id2+id3*10 sum:=first+count*10 四元式(中间代码)的形式:四元式(中间代码)的形式:(intoreal 10 -t1)(*id3 t1 t2)(+id2 t2 t3)(:=t3 -id1)2023/5/1725Ch1.引论:=id1id2+id3*inttoreal10中间代码:抽象语法树中间代码:抽象语法树例:例:id1:=id2+id3*10 sum:=first+count*10 抽象语法树(中间代码)的形式:抽象语法树(中间代码)的形式:2023/5/1726Ch1.引论优化:编译过程的第四个阶段优化:编译过程的第四个阶段n任任务务:对对前前段段工工
24、作作产产生生的的中中间间代代码码进进行行加加工工、变变换换和和改改造造,以以期期在在最最后后阶阶段段产产生生更更为为高高效效(省时间和空间)的目标代码。(省时间和空间)的目标代码。n优化所依循的原则是程序的优化所依循的原则是程序的等价变换规则。等价变换规则。n方方法法:公公共共子子表表达达式式的的提提取取、循循环环优优化化、删删除除无用代码等。无用代码等。n例:例:id1:=id2+id3*10 (sum:=first+count*10)sum:=first+count*10)优化后的四元式:优化后的四元式:(*(*id3 10.0 t1)id3 10.0 t1)(+id2 t1 id1)(+
25、id2 t1 id1)27目标代码生成:编译过程的第五目标代码生成:编译过程的第五个阶段个阶段n任任务务:把把中中间间代代码码(或或经经优优化化处处理理后后的的)变变换换成成特特定定机机器器上上的的低低级级语语言言代代码码(绝绝对对指指令令代代码码或或可可重重定定位位的的指指令令代代码码或或汇汇编编指指令令代代码码)。它它的工作有赖于硬件系统结构和机器指令含义。的工作有赖于硬件系统结构和机器指令含义。n例:例:id1:=id2+id3*10 (sum:=first+count*10 sum:=first+count*10)的的目标代码:目标代码:MOVF id3 ,r2 MOVF id3 ,r
26、2 MULF#10.0,r2 MULF#10.0,r2 MOVF id2 ,r1 MOVF id2 ,r1 ADDF r1 ,r2 ADDF r1 ,r2 281.3 1.3 编译程序的结构编译程序的结构1.3.11.3.1编译编译程序程序总框总框表格管理词法分析器语法分析器语义分析与中间代码产生优化器目标代码生成器源程序单词符号语法单位中间代码中间代码目标代码出错处理29 1.3.2 表格与表格管理表格与表格管理n可可以以按按照照编编译译程程序序总总框框图图设设计计编编译译程程序序。从从图图中中可可以以看看到到除除了了编编译译的的五五个个基基本本阶阶段段外外,一一个个完完整整的的编编译译程程
27、序序还还应应包包括括“表表格格管管理理”和和“出出错处理错处理”两部分。两部分。n在在编编译译程程序序使使用用的的表表格格中中最最重重要要的的是是符符号号表表,它它用用来来登登记记源源程程序序中中出出现现的的每每一一个个名名字字以以及及名名字字的的各各种种属属性性。如如一一个个名名字字是是常常量量名名、变变量量名名,还还是是过过程程名名等等;如如果果是是变变量量名名它它的的类类型型又又是是什什么、所占内存是多大、地址是什么等。么、所占内存是多大、地址是什么等。2023/5/1730Ch1.引论符号表:例符号表:例例例:sum:=first+count*10sum:=first+count*10
28、 的符号表记录的符号表记录:2023/5/1731Ch1.引论1.3.3 出错处理出错处理n一一个个编编译译程程序序不不仅仅能能对对书书写写正正确确的的程程序序进进行行编编译译,而而且且应应能能对对出出现现在在源源程程序序中中的的错错误误进进行行处处理理。如如果果源源程程序序有有错错,编编译译程程序序应应设设法法发发现现错错误误,把把有有关关错错误误报报告告给给用用户户。这这部部分分的的工工作作是是由由专专门门的的一一组程序(叫做组程序(叫做出错处理程序出错处理程序)完成的。)完成的。n出出错错处处理理程程序序检检查查错错误误、报报告告出出错错信信息息、排错、恢复编译工作等。排错、恢复编译工作
29、等。2023/5/1732Ch1.引论1.3.4 遍遍n编编译译器器扫扫描描的的遍遍数数(pass pass 遍遍)对对源源程程序序或或源源程程序序的的中中间间结结果果从从头头到到尾尾扫扫描描一一次次,并并作作有有关关的加工处理,生成新的中间结果或目标程序。的加工处理,生成新的中间结果或目标程序。n每每遍遍的的工工作作从从外外存存上上获获得得前前一一遍遍的的中中间间结结果果(对对于于第第一一遍遍而而言言,从从外外存存获获得得源源程程序序),完完成本遍的有关工作后,再把结果成本遍的有关工作后,再把结果记于外存记于外存。n一个编译过程可由一遍或多遍完成。一个编译过程可由一遍或多遍完成。n多多遍遍完
30、完成成占占内内存存少少,逻逻辑辑结结构构清清晰晰但但消消耗耗时时间间多,速度慢。多,速度慢。2023/5/1733Ch1.引论一遍的编译程序一遍的编译程序源源程程序序目目标标程程序序 语义分析程序语义分析程序整理目整理目标程序标程序 语法分语法分析程序析程序词法分词法分析程序析程序start存储分存储分配配优化优化代码代码生成生成整个编译程序驻留在内存,以调用转接方式连接整个编译程序驻留在内存,以调用转接方式连接341.3.5 编译前端与后端编译前端与后端n编译器的分析编译器的分析/综合模式综合模式 n对对编编译译器器的的各各个个阶阶段段,逻逻辑辑上上可可以以把把它它们们划划分分为为两个部分,
31、即分析部分和综合部分。两个部分,即分析部分和综合部分。n源程序的分析部分源程序的分析部分-称为称为编译器的前端编译器的前端n主主要要由由与与源源语语言言有有关关但但与与目目标标机机无无关关的的那那些些部部分分组组成成。通通常常包包括括词词法法分分析析、语语法法分分析析、语语义义分分析析与与中中间间代代码码产产生生,有有的的代代码码优优化化工工作作,也也可可以以包包括在前端。括在前端。n目标程序的综合部分目标程序的综合部分-称为称为编译器的后端编译器的后端n包包括括编编译译程程序序中中与与目目标标代代码码有有关关的的部部分分,如如与与目目标机有关的优化,和目标代码的生成等。标机有关的优化,和目标
32、代码的生成等。35划分编译前端与后端的好处划分编译前端与后端的好处n前前端端与与后后端端以以中中间间代代码码为为界界面面。中中间间代代码码起起了了分分水水岭岭的的作作用用,中中间间代代码码是是与与机机器器无无关关的的,它它把把编编译译器器分分成成了了与与机机器器有有关关和和无无关关的的两两部部分分。编编译译前前端端与与后后端端的的划划分分有有利利于于编编译译器器的的开发、维护与移植。开发、维护与移植。n相相同同的的前前端端,改改写写不不同同的的后后端端,可可为为不不同同的的机器生成同一个语言的编译程序。机器生成同一个语言的编译程序。n不不同同的的前前端端可可以以生生成成同同一一种种中中间间代代
33、码码,用用相相同同的的后后端端,可可为为同同一一机机器器生生成成不不同同语语言言的的编编译程序。译程序。nJava语言的操作平台无关性的实现就是如此语言的操作平台无关性的实现就是如此361.4 1.4 编译程序与程序设计环境编译程序与程序设计环境n编编译译程程序序是是实实现现高高级级语语言言的的一一个个最最重重要要的的工工具具。但但支支持持程程序序设设计计开开发发通通常常还还需需要要其其它它一一些些工工具具:如如编编辑辑程程序序、连连接接程程序序、调调试试程程序序等等。编编译译程程序序与与这这些些程程序序设设计计工工具具一一起起构构成成所谓的所谓的程序设计环境程序设计环境。n例:例:p8.p8
34、.图图1.2 1.2 AdaAda程序设计环境程序设计环境n在在一一个个程程序序设设计计环环境境中中,编编译译程程序序起起着着中中心心的的作作用用。连连接接程程序序、调调试试程程序序、程程序序分分析析等等工工具具直直接接依依赖赖于于编编译译程程序序所所产产生生的的结结果果,而而其其它它工工具具的的构构造造也也常常常常要要用用到到编编译译的的原原理理、方法和技术。方法和技术。2023/5/1737Ch1.引论1.5 1.5 编译程序的生成编译程序的生成n构造编译程序构造编译程序n使用机器语言或汇编语言作工具构造编译程序使用机器语言或汇编语言作工具构造编译程序n使用高级语言作工具构造编译程序使用高
35、级语言作工具构造编译程序n使使用用机机器器语语言言或或汇汇编编语语言言构构造造编编译译程程序序的的核核心心部部分,使用高级语言构造编译程序的扩充部分分,使用高级语言构造编译程序的扩充部分n使用编译程序自动生成器工具构造编译程序使用编译程序自动生成器工具构造编译程序n使使用用高高级级语语言言作作工工具具构构造造编编译译程程序序可可以以大大大大节节省省程程序序设设计计的的时时间间,并并且且编编译译程程序序易易于于阅阅读读、维护和移植。维护和移植。n本本节节介介绍绍:编编译译程程序序的的移移植植、交交叉叉编编译译和和自自展展技术技术。38T T形图表示一个编译程序形图表示一个编译程序n可可以以用用一
36、一种种T T形形图图来来表表示示一一个个编编译译程程序序涉涉及及的的三三种种语语言言:源源语语言言S S、目目标标语语言言T T和和编编译译程程序序文本的书写语言文本的书写语言I I之间的关系。之间的关系。n表表示示编编译译程程序序是是用用I语语言言书书写写的的,其其作作用用是是把把S语言的源程序翻译为语言的源程序翻译为T语言的目标程序语言的目标程序。源语言源语言S书写语言书写语言I目标语言目标语言TIS,T=n注意注意:如果:如果I I是机器语言,则此编译程序可以是机器语言,则此编译程序可以执行执行-自编译性;如果自编译性;如果I I不是机器语言,不是机器语言,则此编译程序不可以执行,需先进
37、行编译。则此编译程序不可以执行,需先进行编译。39n问问题题:A A机机上上有有一一个个L L语语言言编编译译器器(P1P1),欲欲将将L L语语言言移移植植到到B B机机上上,即即利利用用A A机机上上的的L L语语言言编编译译器构造器构造B B机上的机上的L L语言编译器语言编译器。n解决:解决:n1.1.用用L L语言书写一个语言书写一个B B机上的编译程序机上的编译程序(P0P0)n2.2.用用A A机机上上的的L L语语言言编编译译器器(P1P1)编编译译它它(P0P0),得得到到可可在在A A机机上上运运行行的的“B B机机上上的的L L语语言言编编译译器器”(”(P2P2)n3.
38、3.在在A A机机上上用用P2P2再再编编译译P0P0,得得到到可可在在B B机机上上运行的运行的“B B机上的机上的L L语言编译器语言编译器”(”(P3P3)编译程序的移植编译程序的移植40用用T T形图表示移植形图表示移植(图图1.5)1.5)L语言语言L语言语言代码代码P0P0L语言语言代码代码A代码代码P1P1L语言语言A代码代码代码代码P2P2n注意注意:T形图的组合规则:形图的组合规则:L语言语言L语言语言代码代码P0P0L语言语言代码代码代码代码P2P2P3P3L语言语言代码代码代码代码41交叉编译交叉编译(Cross Compiling)Cross Compiling)n注注
39、意意:上上述述编编译译程程序序P2P2就就是是一一个个交交叉叉编编译译程程序序。该该编编译译程程序序的的宿宿主主机机是是A A机机,它它在在A A机机上上运运行行,产产生生不不同同于于宿宿主主机机的的B B目标机器代码。目标机器代码。L语言语言L语言语言代码代码P0P0L语言语言代码代码代码代码P2P2P3P3L语言语言代码代码代码代码2023/5/1742Ch1.引论LnLn=L=LL1L1编译程序的自编译方式编译程序的自编译方式n先先对对语语言言的的核核心心部部分分构构造造一一个个小小小小的的编编译译程程序序(可可用用低低级级语语言言实实现现),再再以以它它为为工工具具构构造造一一个个能能
40、够够编编译译更更多多语语言言成成分分的的较较大大编编译译程程序序。如如此此扩扩展展下下去去,就就像像滚滚雪雪球球一一样样,越越滚滚越越大大,最最后后形形成成人人们们所所期期望望的的整整个个编编译译程程序序。这这种种通通过过一一系系列列的的自自展展途途径径而而形形成成编编译译程程序序的的过过程程叫叫做做自自编编译译过过程程(编编译译程程序序的的自展技术自展技术)。L0L02023/5/1743Ch1.引论用用T T形图表示自展形图表示自展L1语言语言L0语言语言A代码代码P1P1L0语言语言代码代码A代码代码P0P0L1语言语言A代码代码A代码代码P2P2L2语言语言L1语言语言A代码代码P3P
41、3L1语言语言代码代码A代码代码P2P2P4P4L2语言语言A代码代码A代码代码2023/5/1744Ch1.引论利用编译程序自动生成器(利用编译程序自动生成器(1 1)词法分析器的自动生成程序词法分析器的自动生成程序词法规则说明词法规则说明词法分析程序词法分析程序(C程序程序)输入:输入:词法(正规表达式)词法(正规表达式)识别动作(程序段)识别动作(程序段)输出:输出:yylex()函数函数2023/5/1745Ch1.引论语法分析器的自动生成程序语法分析器的自动生成程序语法规则说明语法规则说明语法分析程序语法分析程序(C程序程序)输入:输入:语法规则(产生式)语法规则(产生式)语义动作(
42、程序段)语义动作(程序段)输出:输出:yyparse()函数函数利用编译程序自动生成器(利用编译程序自动生成器(2 2)2023/5/1746Ch1.引论T T形图:形图:练习练习n设已有设已有 和和 ,若,若L L S S,写出得到写出得到 的过程。的过程。L LL,BL,BA AS,AS,AB BL,BL,BL语言语言L语言语言B代码代码S语言语言代码代码A代码代码L语言语言A代码代码B代码代码L语言语言L语言语言B代码代码L语言语言代码代码B代码代码L语言语言B代码代码B代码代码47CH1.小结小结n1.1.编译编译器、解释器器、解释器n2.2.编编译译器器的的基基本本组组成成,以以阶阶
43、段段划划分分编编译译器器,包包括括词词法法分分析析、语语法法分分析析、语语义义分分析析和和中中间间代代码码生生成成、代代码码优优化化、目目标标代代码码生生成成,另另有有表表格格管管理和出错处理。理和出错处理。n3.3.编编译译器器的的分分析析-综综合合模模式式:分分析析-编编译译前前端端,其其输输出出的的中中间间代代码码与与机机器器无无关关;综综合合-编编译译后后端端,以以前前端端的的输输出出为为输输入入,其其输输出出与与具具体体机机器器指令密切相关。指令密切相关。n4.4.一一些些概概念念:编编译译、宿宿主主机机、目目标标机机、移移植植、交叉编译、遍、交叉编译、遍、T T型图、自编译技术。型图、自编译技术。48习题习题n1.1.试试分分析析一一个个简简短短的的C C程程序序,找找出出几几个个属属于于语语法、词法、语义的语言现象。法、词法、语义的语言现象。n2.2.设已有设已有 和和 ,若,若L L S S,写出得到写出得到 的过程。的过程。n3.3.理解编译程序的移植和自展技术。理解编译程序的移植和自展技术。n4.4.解解释释下下列列名名词词:编编译译程程序序,解解释释程程序序,宿宿主主机,目标机,交叉编译,遍,前端,后端。机,目标机,交叉编译,遍,前端,后端。L LL,BL,BA AS,AS,AB BL,BL,B49
限制150内