《计算机程序编译原理第1章引论.ppt》由会员分享,可在线阅读,更多相关《计算机程序编译原理第1章引论.ppt(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、编译原理编译原理CompilerPrinciples刘玉葆中山大学计算机科学系课程要求教学方式:理论(59)+实践(13)考核方式:考试(70%)+作业和实验(30%)先修课程:离散数学数据结构汇编语言程序设计语言参考书籍:n吕映芝等,编译原理,清华大学出版社n陈火旺等,程序设计语言编译原理,国防工业出版社n李建中等译,编译原理,机械工业出版社(美AlfredV.Aho,RaviSethi,JeffreyD.Ullman,Compilers:Principles,Techniques,andTools)第1章 引论 什么是编译程序编译程序的工作过程 编译程序的结构编译程序的组织方式编译程序的自
2、展、移植和自动化 编译程序的编写系统 并行编译程序 本章小结翻译程序程序设计语言程序设计语言1、低级语言:机器语言、汇编语言特点:用机器语言编写程序难写、难读、难修改、编写程序的效率低下2、高级语言:FORTRAN1、C语言等特点:独立与机器、接近自然语言、编写程序难写、难读、难修改、编写程序的效率高翻译程序翻译程序计算机不能直接执行由用高级语言编写的程序,而只能执行机器语言程序,因此,用高级语言编写的程序必须由一个翻译程序翻译成机器语言程序。翻译的方式:(1)编译方式;(2)解释方式编译方式运行 编译程序初始数据 源程序目标程序结果系统子程序 编译即翻译 先将源程序翻译成汇编语言或机器语言程
3、序(目标程序),然后再执行它。解释程序源程序结果边翻译边执行 解释方式和编译方式不同,解释方式并不事先生成目标程序然后再执行,而是对源程序边解释边执行。编译程序的工作过程词法分析词法分析,扫描源程序,分解和识别出每个单词,并把单词表示成相应的机内表示。语法分析语法分析,把单词符号串分解成各类语法单位,如表达式、语句等。语义分析语义分析,对源程序进行语义检查,保证标识符和常数的正确使用,为代码生成收集信息。中间代码生成,中间代码生成,根据语义规则,将源程序表示成某种中间代码的形式,如三元式,四元式等。中间代码优化中间代码优化,调整和改变中间代码中某些操作的次序,最终生成更加高效的目标代码。目标代
4、码生成目标代码生成,将中间代码转换成等价的目标代码。词法分析例例.某源程序片断如下:某源程序片断如下:beginbegin var sum,first,count:real var sum,first,count:real;sum:=first+count*10 sum:=first+count*10end.end.1.1.保留字保留字beginbegin2.2.保留字保留字varvar3.3.标识符标识符sum (id1)sum (id1)4.4.逗号逗号,5.5.标识符标识符first (id2)first (id2)6.6.逗号逗号,7.7.标识符标识符count (id3)count
5、(id3)8.8.冒号冒号:9.9.保留字保留字realreal10.10.分号分号;11.11.标识符标识符sumsum12.12.赋值号赋值号:=:=13.13.标识符标识符firstfirst14.14.加号加号+15.15.标识符标识符countcount16.16.乘号乘号*17.17.整数整数101018.18.保留字保留字endend19.19.界符界符.id1:=id2+id3*10语法分析赋值语句赋值语句标识符标识符表达式表达式表达式表达式+表达式表达式表达式表达式标识符标识符整数整数标识符标识符:=:=表达式表达式*id1:=id2+id3*10 id1:=id2+id3*
6、10 的语法树的语法树的语法树的语法树id1id1sumsumid2id2firstfirstid3id3countcount1010:=:=id1id1+id2id2*id3id31010(形式(形式(形式(形式2 2)(形式(形式(形式(形式1 1)语义分析id1:=id2+id3*10 id1:=id2+id3*10 的语法树的语法树的语法树的语法树:=:=id1id1+id2id2*id3id31010:=:=id1id1+id2id2*id3id31010inttorealinttoreal语义结点中间代码生成以及优化源程序源程序 sum:=first+count*10生成的中间代码
7、可以是:生成的中间代码可以是:(inttoreal10-t1 )(*id3t1t2 )(+id2t2t3 )(:=t3-id1)四元式:(运算符,运算对象四元式:(运算符,运算对象1,运算对象,运算对象2,结果),结果)优化后的代码优化后的代码(*id310.0t1 )(+id2t1id1 )目标代码生成(*(*id3id310.010.0t1 )t1 )(+(+id2id2t1t1id1)id1)sum:=first+count*10sum:=first+count*10MOVFMOVFid3,id3,R R2 2MULFMULF#10.0,#10.0,R R2 2MOVFMOVFid2,i
8、d2,R R1 1ADDFADDFR R1 1,R R2 2MOVMOVR R1 1,id1id1编译程序的结构编译程序的结构表格处理程序出错处理程序源程序语法分析程序语义分析成程序中间代码生成程序中间代码优化程序目标代码生成程序词法分析程序目标程序 编译程序的组织方式编译程序的组织方式1、前端和后端前端,主要依赖源程序,通常包括词法分析、语法分析、语义分析、中间代码生成和中间代码优化。后端,主要依赖硬件系统和机器指令系统,包括目标代码生成。2、分遍遍:对源程序或中间代码程序,从头至尾扫描一次并完成所规定的工作称为一遍。分遍的优点:多遍功能独立,相互联系简单,逻辑结构清晰。缺点:增加了编译程序
9、的长度和编译时间。编译程序的自展、移植与自动化1、高级语言的自编译性高级语言的自编译性,是指可以用这个语言来编写自己的编译程序。2、编译程序的自展技术具有自编译性的语言可以按照自展技术来构造其编译程序。将源语言L分解成核心部分L0与扩充部分L1,L2,Ln,使得对核心部分L0的一次或多次扩充得到源语言L3、编译程序的移植编译程序可以通过移植得到。4、编译程序的自动化Lex:词法分析生成器Yacc:语法分析生成器编译程序编写系统编译程序编写系统将有助于减轻编写翻译程序(包括编译程序、汇编程序、解释程序)工作的任何软件系统或工具包,统称为翻译程统称为翻译程序编写系统序编写系统(Translator
10、WritingSystem,TWS)。TWS的目的在于简化编译程序的实现。因此,TWS通常包含了编译程序所必须执行的各种基本操作,如建立、查找符号表,生成目标代码,出错处理等操作。TWS可分为三类。(1)自动产生编译程序;(2)面向语法的符号加工程序;(3)可扩充语言组成的集合。并行编译程序串行编译程序串行编译程序:适合于SISD结构计算机的编译程序。并行编译程序并行编译程序:适合于SISD和MIMD结构计算机,并具有并行处理功能的编译程序。并行编译程序主要实现对并行语言的翻译。SISD SISD 单指令流单数据流,传统的单处理机属于SISD计算机。MIMDMIMD 多指令流多数据流,包括了大多数多处理机及多计算机系统。我国的YH-II型计算机是这种类型的计算机。小结小结编译程序功能编译程序功能编译程序工作过程编译程序工作过程编译程序结构编译程序结构编译程序组织方式编译程序组织方式编译程序的自编性,自展性以及自动化编译程序的自编性,自展性以及自动化编译程序的编写系统编译程序的编写系统研究前沿:并行编译研究前沿:并行编译习题一:习题一:1.4.1.5.