如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
编译原理自我介绍开课目的及应用前景:内容简介:教学设计:第一章绪论1.2编译过程概述编译器的各个阶段:各分析阶段语法分析语义分析阶段中间代码生成阶段代码优化阶段代码生成阶段1.3符号表管理编译器的一个基本功能是记录源程序中使用的标识符符号表的接口:关键字的处理符号表的实现1.4编译各阶段的分组后端主要包括代码优化、代码生成和相关错误处理。二、编译的遍在编译的各个阶段都会发现源程序中的错误,第二章高级语言及其语法描述内容简介:对于编译程序设计者来说:语言定义就是具体实现的理论依据。词法规则是指单词符号的形成规则上述的定义是用文字来描述的,当设计编译程序时,就要把它用形式的方式描述出来,就要用到形式语言。C语言的标识符的文法和自动机描述:S二.语法规则表达式:E→E+TE→E-TE→TT→T*FT→T/FT→FF→(E)F→id布尔表达式:B→BorBB→BandBB→notBB→(E)B→idrelopidB→trueB→false赋值、分支、循环语句:S→id=ES→ifBthenSS→ifBthenSelseSS→whileBdoSS→{L}L→L;SL→S调用语句:S→callid(Elist)Elist→Elist,EElist→E|ε类型说明和过程说明语句:P→DD→D;DD→id:TD→id(Elist)D;ST→intT→float数组说明语句:L→id[Elist]Elist→Elist,EElist→E2.1.2语义2.2构造基础FORTRANFORTRAN的构成特点:但是不同程序段里的同名公用块却代表同一个存贮区域二。Pascal关于名字的作用域的规定:三.java一个类把有关的数据及其操作封装在一起构成一个抽象数据类型2.2.2构造基础每个对象可以看做是一个存贮单元,二.数据类型三。数据结构任一数组元素A[i1,i2,……in]的地址为:D=a+(i1-l1)d2d3……dn+(i2-l2)d2d2……dn……+(in-1-ln-1)dn+(in-ln)变量部分:v=(……(i1d2+i2)d3+i3)d4+……+in-1)dn+in在编译时,当遇到说明时,必须把数组的有关信息记录在一个“内情向量”之中,用于数组元素的地址计算。对于确定数组来说,内情向量可登记在符号表中;2.记录(结构)记录结构最简单的存贮方式是连续存放四.抽象数据类型五.语句与控制结构⑴赋值句⑵控制语句⑶说明语句⑷简单句和复合句programreference(input,output);vara,b:integer;procedureswap(x,y:integer);vartemp:integer;begintemp:=x;x:=y;y:=tempend;begina:=1;b:=2;swap(a,b);writeln('a=',a,'b=',b)end.1传值调用子程序为每一个形参开辟一个存贮单元,用于存放相应实参的值。使用传值的方法,调用swap(a,b)等价于下面几步:x:=ay:=btemp:=xx:=yy:=temp2引用调用(传地址)把实在参数的地址传递给相应的形式参数,在目标代码中,在被调用过程中对形式参数的一次引用就成为对传递给被调用过程的指针的一个间接引用。子程序为每个形参开辟一个单元,用于存放相应实参的地址,3复制恢复(传值结果)实现:1.当控制流入到被调用过程之前,把实在参数的右-值和左-值传递到被调用过程中;2.当控制返回时,把形式参数的现行右-值复制回到相应的实在参数的左-值中。在主调程序中设置计算实参地址和右值的形实替换子程序THUNK例:有程序段:procedurep(x,y,z)beginy=y+1;z=z+x;end传值:传地址:传值结果:传名:例:有程序段:procedurep(x,y,z)beginy=y+1;z=z+x;end传值:传地址:传名:第三章词法分析编译器的各个阶段:3.2词法分析器的手工构造:用DFA能识别=3.1词法分析程序的设计<12,><25,符号表入口><39,><25,符号表入口><20,><25,符号表入口><36,><26,常数表入口><8,><25,符号表入口><36,><26,常数表入口>三、词类和属性界符和运算符:表3.1单词词类编码对于关键字、界符、运算符来说,它们的词类编码就可以表示其完整的信息,对于常数,其单词自身的属性常用其在常数表中的入口指针来表示以语句子a=b+c*d为例,假设按表3.1为单词编码,词法分析后的结果为:四、词法分析的设计形式(1)设计成一个独立程序,完成词法分析的任务,结果以文件的形式组织,做为语法分