欢迎来到天天文库
浏览记录
ID:51592833
大小:322.00 KB
页数:35页
时间:2020-03-25
《编译原理与技术讲义 (2).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理与技术7/22/20211《编译原理与技术》讲义第一章引论什么是编译程序?翻译程序、解释程序和汇编程序编译程序的组成结构编译程序的生成相关话题7/22/20212《编译原理与技术》讲义语言翻译过程算法描述,求某整数n的阶乘fact(n),n≥01//n==0fact(n)=n*fact(n-1)//n!==n*(n-1)!伪语言描述fact(n)=ifn≤0then1elsen*fact(n-1)7/22/20213《编译原理与技术》讲义语言翻译过程高级程序设计语言描述,(如C语言)intfact(in
2、tn){if(n<=0)return1;elsereturn(n*fact(n-1));}7/22/20214《编译原理与技术》讲义语言翻译过程输入命令ccfoo.cc程序foo.cAnsiCcompilerccObjectfileLinker/连接程序a.out/可执行程序库函数或其它object文件7/22/20215《编译原理与技术》讲义语言翻译过程a.out/可执行程序loader/装入程序计算机输入数据计算结果7/22/20216《编译原理与技术》讲义语言翻译过程为何不设计直接运行高级语言的机器?机
3、器本身的指令系统(二进制)语言本身扩展7/22/20217《编译原理与技术》讲义什么是编译程序?源程序S(高级语言)编译程序C目标程序T(机器语言)初始数据目标程序T运行系统计算机计算结果7/22/20218《编译原理与技术》讲义什么是编译程序?源语言(程序)到目标语言(程序)的映射转换或者翻译过程系列转换(翻译)过程源语言ST1…Tn目标语言T中间语言7/22/20219《编译原理与技术》讲义解释程序与汇编程序均属于翻译程序源程序S初始数据Interpreter/解释程序计算结果汇编程序S’汇编语言asse
4、mbler/汇编程序目标程序T7/22/202110《编译原理与技术》讲义C函数fact的汇编语言形式.file"foo.c".text.globlfact.typefact,@functionfact:pushl%ebpmovl%esp,%ebpsubl$4,%espcmpl$0,8(%ebp)jg.L2movl$1,-4(%ebp)jmp.L1.L2:subl$12,%espmovl8(%ebp),%eaxdecl%eaxpushl%eaxcallfactaddl$16,%espimull8(%ebp),%
5、eaxmovl%eax,-4(%ebp).L1:movl-4(%ebp),%eaxleaveret.Lfe1:.sizefact,.Lfe1-fact.ident"GCC:(GNU)3.2.220030222(RedHatLinux3.2.2-5)"7/22/202111《编译原理与技术》讲义编译程序的组成结构词法分析阶段语法分析阶段语义分析、中间代码生成优化阶段目标代码生成7/22/202112《编译原理与技术》讲义编译程序的组成结构semanticsparserscanneroptimizercodegen
6、eratorprogram前端frontend与源语言有关middleend后端backend与目标机相关7/22/202113《编译原理与技术》讲义编译程序的组成结构例子,hoo.c:main(){floatposition,initial,rate;position=initial+rate*60;}7/22/202114《编译原理与技术》讲义编译程序的组成结构词法分析阶段-scanner字符流->记号流position=initial+rate*60字符流scannerid1=id2+id3*60记号流标
7、识符赋值运算符标识符加运算符标识符乘运算符整型常量7/22/202115《编译原理与技术》讲义编译程序的组成结构语法分析阶段-parser记号流->分析树(语法树)id1=id2+id3*60记号流parser=id1id2+*id360语法树7/22/202116《编译原理与技术》讲义编译程序的组成结构语义分析语义树-带有语义信息的分析树(语法树)id1id2+*id360=intfloat进行类型转换7/22/202117《编译原理与技术》讲义编译程序的组成结构中间代码生成形式多样-三地址码,p-code
8、等t1:=int_to_float(60)t2:=id3*t1t3:=id2+t2id1:=t37/22/202118《编译原理与技术》讲义编译程序的组成结构代码优化得到“优化”后的中间代码;也可以在最后的代码生成阶段实施“优化”t1:=rate*60.0//直接用浮点数60.0position:=initial+t1//去除多余的//临时变量较优化前,减少2条中间代码7/22/202
此文档下载收益归作者所有