编译原理第5章语义分析和中间代码产生.ppt
《编译原理第5章语义分析和中间代码产生.ppt》由会员分享,可在线阅读,更多相关《编译原理第5章语义分析和中间代码产生.ppt(49页珍藏版)》请在三一办公上搜索。
1、第五章语法制导翻译和中间代码产生,2023年11月16日星期四,1,第五章语法制导翻译和中间代码产生,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,2,语义分析的任务:根据语法成分的结构,分析其含义,并用一种内部形式(中间代码)或直接用目标语言表示出来。具体:静态语义检查和翻译包括:类型检查(操作符是否相容,例如%)控制流检查(break是否有switch和for,while)一致性检查(int a;float a;)相关名字检查、等等,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,3,5.1 属性文法一、属性,一、属性:一般用来描述客观存在的事物或人的特性
2、。例如,学生的姓名、年龄、性别等;商品的颜色、重量、单价等。编译技术中用属性来描述计算机处理对象的特征。例如:X.Type,X.Place,X.val等分别描述X的类型,存储位置、值等不同的特征。属性分两类:综合属性:一般用于“自下而上”传递信息。继承属性:一般用于“自上而下”传递信息。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,4,二、属性文法,对于某个压缩了的上下文无关文法,当为每个文法符号引进一组属性,且让该文法中的重写规则附加以语义规则时,称该上下文无关文法为属性文法。形式定义:一个属性文法形式上定义为一个三元组AG,AG=(G,V,E)。其中G表示一个上下文无关
3、文法;V表示属性的有穷集;E表示属性的断言或谓词的有穷集。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,5,三、综合属性,从语法分析树的角度来看,如果一个结点的某一属性,其值由子结点的属性之值来计算,则称该属性为综合属性。综合属性用于“自下而上”传递信息。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,6,例1:算术表达式求值的属性文法。规则式语义规则1.LEprint(E.val)2.EE1+TE.val:=E1.val+T.val3.ETE.val:=T.val4.TT1*FT.val:=T1.val*F.val5.TFT.val:=F.val6.F(
4、E)F.val:=E.val7.FdigitF.val:=digit.lexval,与规则式关联的每一个语义规则的左部符号E,T,F等的属性值的计算由右部非终结符决定,这种属性称为综合属性。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,7,求:3*5+4,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,8,四、继承属性,语法树分析中,若一个结点的某个属性之值由该结点的兄弟结点和/或父结点的属性之值来计算,则此结点的属性称为继承属性。继承属性用于“自上而下”传递信息。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,9,例2、说明语句中简单变量
5、类型信息的属性文法。规则式语义规则1.DTLL.in:=T.type2.TintT.type:=integer3.TrealT.type:=real4.LL1,idL1.in:=L.inaddtype(id.entry,L.in)5.Lidaddtype(id.entry,L.in),过程addtype把每一个标识符id的类型信息(由L.in继承)登录在符号表的相关项id.entry中。,DT L int L,id id,T有一个综合属性type,其值为integer或real。L.in由T.type确定后逐步传递到下边有关结点使用。这种属性称为继承属性。,第五章语法制导翻译和中间代码产生,2
6、023年11月16日星期四,10,五、属性的初始值,终结符号只有综合属性,它们由词法分析器提供。非终结符号既有综合属性也可有继承属性,文法开始符号的所有继承属性作为属性计算前的初始值。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,11,5.2 语法制导翻译法,语法制导翻译法的基本思想:对文法的每一条产生式,设计语义子程序。在语法分析的过程中,当使用一条产生式推导或归约时,调用该语义子程序进行属性计算,完成预定的翻译工作。语法制导翻译法:在语法分析的过程中,依随分析过程,根据每个产生式添加的语义动作进行翻译的方法。,第五章语法制导翻译和中间代码产生,2023年11月16日星期
7、四,12,语义子程序,语义子程序也称为翻译子程序,语义动作。它描述了有关产生式所对应的翻译工作。语义动作一方面指出了产生式所对应的符号串的意义;另一方面又按照这种意义规定了对应的属性计算加工动作。语义动作:查填各种表格计算某变量的值生成某种中间代码打印错误信息等等,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,13,LR分析制导的具体实现方法,1、为文法产生式设计语义子程序。2、为文法构造一张无冲突的LR分析表。3、修改总控程序,归约时调用语义子程序。4、扩充LR分析栈,用来存放各文法符号对应的语义信息。例如:(1).EE1+E2E.val=E1.val+E2.val(2).
8、EE1*E2E.val=E1.val*E2.val(3).E(E1)E.val=E1.val(4).EdigitE.val=lex.digit,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,14,#,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,15,扩充的LR分析栈:,(1).EE1+E2E.val=E1.val+E2.val(2).EE1*E2E.val=E1.val*E2.val(3).E(E1)E.val=E1.val(4).EdigitE.val=lex.digit,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,16,第五章语法制
9、导翻译和中间代码产生,2023年11月16日星期四,17,5.3 中间语言,常用的中间语言有:一、逆波兰式二、三元式与间接三元式三、树形表示法四、四元式,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,18,一、逆波兰式,1、逆波兰式(后缀式):每一运算符都置于其运算对象之后。(无括号表达式)中缀表示后缀表示A*BAB*A+B*CABC*+(A+B)*(C+D)AB+CD+*(a=0&b3)|(e&x!=y)a0=b3&exy!=&|,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,19,2、LR分析制导生成逆波兰式,文法:0 EE空1EE(1)+E(2)pri
10、nt+2EE(1)*E(2)print*3E(E(1)空4Eiprint i,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,20,二、三元式与间接三元式,一般形式:(op,AG1,AG2)例如:a:=-b*(c+d)三元式为:(,b,)(+,c,d)(*,)(:=,a),第五章语法制导翻译和中间代码产生,2023年11月16日星期四,21,间接三元式,例如:语句X:=(A+B)*CY:=D(A+B),第五章语法制导翻译和中间代码产生,2023年11月16日星期四,22,三、树形表示法,抽象语法树:在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种变换后
11、的语法树称为抽象语法树。,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,23,树形表示,A*B+C*D,+,C,*,A,*,B,D,末端结点表示一个运算对象,每一个内结点表示一个一元或二元运算符。,树形表示是三元式的翻版,(3)+,(1)*,(2)*,C,A,B,D,第五章语法制导翻译和中间代码产生,2023年11月16日星期四,24,四、四元式,一般形式:(op,AG1,AG2,result)直观形式:result:=AG1 op AG2例如:求x:=a+b*c的四元式。(*,b,c,T1)直观式:T1:=b*c(+,a,T1,T2)T2:=a+T1(:=,T2,x)x:=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语义 分析 中间 代码 产生

链接地址:https://www.31ppt.com/p-6599833.html