第八章语法制导翻译和中间代码生成课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第八章语法制导翻译和中间代码生成课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 语法 制导 翻译 中间 代码 生成 课件
- 资源描述:
-
1、语义分析语义分析n编译程序的语义处理工作:编译程序的语义处理工作:n静态语义分析静态语义分析审查每个语法结构的静态审查每个语法结构的静态语义,即验证语法结构合法的程序是否真语义,即验证语法结构合法的程序是否真正有意义。正有意义。n动态语义动态语义执行翻译、生成目标代码执行翻译、生成目标代码n两种翻译模式:生成中间代码形式、直接生两种翻译模式:生成中间代码形式、直接生成目标代码。成目标代码。n中间代码中间代码中间语言:是介于源程序语言和中间语言:是介于源程序语言和机器语言之间的一种表示形式。机器语言之间的一种表示形式。语义学语义学语义形式化、语义建模语义形式化、语义建模n文法模型文法模型属性文法
2、属性文法n命令式或操作式模型命令式或操作式模型操作语义学操作语义学n公理式模型公理式模型公理语义学公理语义学n应用式模型应用式模型指称语义学指称语义学n目前在实际应用中比较流行的语义描述和语目前在实际应用中比较流行的语义描述和语义处理的方法主要是义处理的方法主要是属性文法属性文法和和语法制导翻语法制导翻译译 8.1 属性文法属性文法(attribute grammar)n一个一个属性文法属性文法包括一个上下文无关文法和包括一个上下文无关文法和一系列语义规则,这些语义规则附在文法一系列语义规则,这些语义规则附在文法的每个产生式上。的每个产生式上。n语法制导翻译是指在语法分析过程中,完语法制导翻译
3、是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描成附加在所使用的产生式上的语义规则描述的动作。述的动作。属性文法属性文法n一个一个属性文法属性文法是一个是一个三元组三元组 A=(G,V,F)G 上下文无关文法上下文无关文法 V 属性的有穷集属性的有穷集 F 关于属性的断言或谓词关于属性的断言或谓词(语义规则语义规则)的的有穷集。有穷集。n每个属性和非终结符或终结符相联每个属性和非终结符或终结符相联n每个断言与文法的某产生式相联,只引用该每个断言与文法的某产生式相联,只引用该产生式相联的属性。产生式相联的属性。属性文法属性文法n这些属性代表与文法符号相关信息,如它的这些属性代表与文法
4、符号相关信息,如它的类型、值、代码序列、符号表内容等等。类型、值、代码序列、符号表内容等等。n属性与变量一样,可以进行计算和传递。属属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。性加工的过程即是语义处理的过程。n属性的计算规则称为语义规则属性的计算规则称为语义规则属性文法属性文法n表达式文法:表达式文法:ET1+T2|T1 or T2 Tnum|true|false E T1+T2 T1.t=int AND T2.t=int E T1 or T2T1.t=bool AND T2.t=bool T numT.t:=int T tureT.t:=bool T falseT.
5、t:=bool 属性文法属性文法n使用使用 N.t 的形式表示与非终结符的形式表示与非终结符N相连的属相连的属性性t。nT.t的值为的值为int或或bool。n与非终结符与非终结符E的产生式相连的断言表明:两的产生式相连的断言表明:两个个T的属性必须相同。的属性必须相同。继承的和综合的属性继承的和综合的属性n属性通常分为两类:属性通常分为两类:综合属性综合属性和和继承属性继承属性n综合属性用于综合属性用于“自下而上自下而上”传递信息,传递信息,n继承属性用于继承属性用于“自上而下自上而下”传递信息。传递信息。n非终结符既可有综合属性也可有继承属性,非终结符既可有综合属性也可有继承属性,但文法开
6、始符号没有继承属性。但文法开始符号没有继承属性。n终结符只有综合属性。终结符只有综合属性。继承的和综合的属性继承的和综合的属性n属性文法中,对应每一个产生式属性文法中,对应每一个产生式 A 都有都有一套与之相关联的语义规则,每条规则的形一套与之相关联的语义规则,每条规则的形式为:式为:b:=f(c1,c2,ck)其中:其中:f是一个函数,是一个函数,b和和c1,c2,ck是该是该产生式文法符号的属性。产生式文法符号的属性。(1)如果如果b是是A的一个属性,的一个属性,c1,c2,ck是产是产生式右部文法符号的属性或生式右部文法符号的属性或A的其它属性,的其它属性,则称则称b是是A的综合属性。的
7、综合属性。继承的和综合的属性继承的和综合的属性(2)如果如果b是产生式右部某个文法符号是产生式右部某个文法符号X的一个的一个属性,并且属性,并且c1,c2,ck是是A或产生式右部或产生式右部任何文法符号的属性,则称任何文法符号的属性,则称b是是X的继承属的继承属性。性。n在两种情况下,都称属性在两种情况下,都称属性b依赖于属性依赖于属性c1,c2,ck属性文法的例属性文法的例产生式产生式 语语 义义 规规 则则LE Print(E.val)EE1+T E.val:=E1.val+T.valET E.val:=T.valTT1*F T.val:=T1.val F.valTF T.val:=F.v
8、alF(E)F.val:=E.valFdigit F.val:=digit.lexval n非终结符非终结符E、T及及F都有一个综合属性都有一个综合属性valn符号符号digit有一个综合属性,它的值由词法有一个综合属性,它的值由词法分析器提供。分析器提供。n与产生式与产生式LE对应的语义规则仅仅是打印由对应的语义规则仅仅是打印由E产生的算术表达式的值的一个过程,我们产生的算术表达式的值的一个过程,我们可认为这条规则定义了可认为这条规则定义了L的一个虚属性。的一个虚属性。n某些非终结符加下标是为了区分一个产生式某些非终结符加下标是为了区分一个产生式中同一非终结符多次出现中同一非终结符多次出现属
9、性文法的例属性文法的例属性文法的例属性文法的例.LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的带注释的分析树的带注释的分析树设表达式为设表达式为 35+4,则则语义动作语义动作打印数值打印数值19继承属性继承属性例例8.2 描述说明语句中各种变量的类型信息描述说明语句中各种变量的类型信息的语义规则,的语义规则,L.in是继承属性。是继承属性。产产 生生 式式语语 义义 规规 则则D TLT intT realL L1,id
10、L idL.in:=T.typeT.type=integerT.type:=realL1.in:=L.inaddtype(id.entry,L.in)addtype(id.entry,L.in)n 一个结点的继承一个结点的继承属性值是由此结点属性值是由此结点的父结点和的父结点和/或兄或兄弟结点的某些属性弟结点的某些属性来决定的。来决定的。继承属性继承属性Real id1,id2,id3DL.in=realL.in=realL.in=realT.type=realrealid2id1id3.,8.2 语法制导翻译概论语法制导翻译概论n一个翻译是符号串对的一个集合一个翻译是符号串对的一个集合。在一
11、个编。在一个编译程序定义的翻译中,符号串对是源程序和译程序定义的翻译中,符号串对是源程序和目标程序。目标程序。n各个编译阶段定义一个翻译各个编译阶段定义一个翻译 词法分析:词法分析:(字符串,单词串字符串,单词串)语法分析语法分析:(单词串,语法树单词串,语法树)代码生成:代码生成:(语法树,汇编语言语法树,汇编语言)语法制导翻译语法制导翻译n直观地说,一个直观地说,一个语法制导翻译语法制导翻译的基础是一个的基础是一个文法,其中翻译成分依附在每一产生式上。文法,其中翻译成分依附在每一产生式上。n根据每个产生式所对应的语义子程序根据每个产生式所对应的语义子程序(或语义或语义规则描述的语义动作规则
12、描述的语义动作)进行翻译进行翻译语法制导翻译实现语法制导翻译实现n从概念上讲,语法制导翻译基于属性文法的从概念上讲,语法制导翻译基于属性文法的处理过程,通常是这样的:处理过程,通常是这样的:输入符号串输入符号串 分析树分析树 属性依赖图属性依赖图 语义规则的计算顺序语义规则的计算顺序8.2.1 计算语义规则计算语义规则n依赖图依赖图一个有向图,用于描述分析树中的一个有向图,用于描述分析树中的属性和属性间的相互依赖关系。属性和属性间的相互依赖关系。n属性计算有树遍历和一遍扫描两种方法属性计算有树遍历和一遍扫描两种方法n树遍历树遍历设已建立语法树,且树中带有开始设已建立语法树,且树中带有开始符号的
13、继承属性和终结符的综合属性,以某符号的继承属性和终结符的综合属性,以某种次序遍历语法树,直到计算出所有属性。种次序遍历语法树,直到计算出所有属性。n一遍扫描一遍扫描在语法分析的同时计算属性值在语法分析的同时计算属性值依赖图的构造算法依赖图的构造算法For 分析树中的每一个结点分析树中的每一个结点n do For 结点的文法符号的每一个属性结点的文法符号的每一个属性 a do 为为a在依赖图中建立一个结点在依赖图中建立一个结点;For 分析树中的每一个结点分析树中的每一个结点n doFor 结点结点n所用产生式对应的每一个语义规则所用产生式对应的每一个语义规则 b:=f(c1,c2,ck)do
14、For i:=1 do 从从ci结点到结点到b结点构造一条有向边结点构造一条有向边 8.2.2 S-属性文法和自下而上翻译属性文法和自下而上翻译nL-属性文法属性文法的一个特例:的一个特例:S-属性文法属性文法nS-属性文法属性文法:只含有综合属性的属性文法:只含有综合属性的属性文法n综合属性可以在分析输入符号串的同时自下综合属性可以在分析输入符号串的同时自下而上的计算而上的计算n语法制导方式计算表达式语法制导方式计算表达式 2+3*52+3*5的分析和计值过程的分析和计值过程步骤步骤 动作动作 状态栈状态栈 语义栈语义栈(值栈值栈)符号栈符号栈 余留输入串余留输入串1)0 -#2+3*5#2
15、)05 -#2+3*5#3)r6 03 -2#F +3*5#4)r4 02 -2#T +3*5#5)r2 01 -2#E +3*5#6)016 -2-#E+3*5#7)0165 -2-#E+3 *5#步骤步骤 动作动作 状态栈状态栈 语义栈语义栈(值栈值栈)符号栈符号栈 余留输入串余留输入串8)r6 0163 -2-3#E+F *5#9)r4 0169 -2-3#E+T *5#10)01697 -2-3-#E+T*5#11)016975 -2-3-#E+T*5#12)r6 01697(10)-2-3-5#E+T*F#13)r3 0169 -2-(15)#E+T#14)r1 01 -(17)#E
16、#15)接受接受2+3*5的分析和计值过程的分析和计值过程8.2.3 L-属性文法在自上而下分析中的实现属性文法在自上而下分析中的实现n一个属性文法称为一个属性文法称为L-属性文法属性文法,如果对于每,如果对于每个产生式个产生式 A X1X2Xn,其每个语义规则中,其每个语义规则中的每个属性或者是的每个属性或者是综合属性综合属性,或者是,或者是Xj(1jn)的一个的一个继承属性继承属性且仅依赖于:且仅依赖于:(1)在在Xj左边的符号左边的符号X1,X2,Xj-1 的属性;的属性;(2)A 的继承属性的继承属性nL-属性文法允许一次遍历就计算出所有属性属性文法允许一次遍历就计算出所有属性值值8.
17、2.4 L-属性文法在自下而上分析中的实现属性文法在自下而上分析中的实现n实现方法:从翻译模式中去掉嵌入在产生式实现方法:从翻译模式中去掉嵌入在产生式在中间的动作或者在中间的动作或者用综合属性代替继承属性用综合属性代替继承属性8.3 中间代码的形式中间代码的形式n 中间代码中间代码(Intermediate code)n 源程序的一种内部表示源程序的一种内部表示n 不依赖目标机的结构;易于机械生成目标代不依赖目标机的结构;易于机械生成目标代码;逻辑结构清楚;利于不同目标机上实现同码;逻辑结构清楚;利于不同目标机上实现同一种语言;利于进行与机器无关的优化。一种语言;利于进行与机器无关的优化。n
18、中间代码的几种形式:中间代码的几种形式:逆波兰、四元式、三元式、间接三元式、树逆波兰、四元式、三元式、间接三元式、树 8.3.1 逆波兰记号逆波兰记号n逆波兰表示逆波兰表示对表达式的后缀表示对表达式的后缀表示语言中的表示形式语言中的表示形式逆波兰表示逆波兰表示 a+b a+b*c (a+b)*c a:=b*c+b*d ab+abc*+ab+c*abc*bd*+:=逆波兰记号逆波兰记号n例如:例如:-B+C*D 的逆波兰式为的逆波兰式为 BCD*+,采用堆栈方式,扫描表达式。计值过程为:采用堆栈方式,扫描表达式。计值过程为:n B进栈进栈n 对对B进行单目运算,栈顶置换为进行单目运算,栈顶置换为
19、-Bn C进栈进栈n D进栈进栈n 栈顶两元素栈顶两元素C、D相乘并退栈,结果进栈相乘并退栈,结果进栈1.栈顶两元素相加,退栈,结果进栈栈顶两元素相加,退栈,结果进栈 n例例8.5 把下述产生式定义的算术表达式映把下述产生式定义的算术表达式映射到后缀射到后缀(逆波兰逆波兰)表示:表示:逆波兰记号逆波兰记号 产产 生生 式式 翻翻 译译 规规 则则 EE+T E T T T F T F F(E)F a E=ET+E=T T=TF T=F F=E F=a逆波兰记号逆波兰记号例:例:A+B*(C-D)+E/(C-D)N 逆波兰式:逆波兰式:A B C D-*+E C D N /+例:例:if E t
20、hen S1 else S2作为三目运算符处理,用¥表示:作为三目运算符处理,用¥表示:E S1S2¥8.3.2 三元式和树形表示三元式和树形表示三元式:三元式:(op,ARG1,ARG2)其中:其中:op 运算符运算符 ARG1 第一运算对象第一运算对象 ARG2 第二运算对象第二运算对象例例:a:=b*c+b*d 三元式:三元式:(1)(*,b,c )(2)(*,b,d)(3)(+,(1),(2)(4)(:=,(3),a)树形表示树形表示n例例:a:=b*c+b*dn二目运算对应二叉树,二目运算对应二叉树,:=*a+cb*bd三元式和树形表示三元式和树形表示例例:A+B*(C-D)+E/(
21、C-D)N 三元式三元式:(1)(-C D )(2)(*B (1)(3)(+A (2)(4)(-C D )(5)(4)N )(6)(/E (5)(7)(+(3)(6)间接三元式间接三元式 间接码表间接码表(1)(-C D )(1)(2)(*B (1)(2)(3)(+A (2)(3)(4)(1)N )(1)(5)(/E (4)(4)(6)(+(3)(5)(3)(5)三元式和树形表示三元式和树形表示8.3.3 四元式四元式四元式形式四元式形式:(op,ARG1,ARG2,RESULT)其中:其中:op 运算符运算符 ARG1 第一运算对象第一运算对象 ARG2 第二运算对象第二运算对象 RESUL
22、T 运算结果运算结果 RESULT:=ARG1 op ARG2运算对象及运算结果是程序中定义的变量,运算对象及运算结果是程序中定义的变量,必要时可使用编译程序引进的临时变量。必要时可使用编译程序引进的临时变量。四元式四元式例例:A+B*(C-D)+E/(C-D)N 四元式四元式:(1)(-C D T1)(2)(*B T1 T2)(3)(+A T2 T3)(4)(-C D T4)(5)(T4 N T5)(6)(/E T5 T6)(7)(+T3 T6 T7)四元式写成简单赋值形式四元式写成简单赋值形式n t1:=b*cn t2:=b*dn t3:=t1+t2n a:=t3n其它语句直接写成:其它语
23、句直接写成:(jump,-,-,L)goto L(jrop,B,C,L)if B rop C goto L8.4 简单赋值语句的翻译简单赋值语句的翻译在四元式中,用在四元式中,用ti表示中间或最后结果,实表示中间或最后结果,实际实现时,际实现时,ti或者是指向符号表项的指针,或者是指向符号表项的指针,或者是一个临时变量的整数码。或者是一个临时变量的整数码。属性属性 id.name,E.place,作为语义变量,作为语义变量E.place表示存放表示存放E值的变量名在符号表中的值的变量名在符号表中的登录项,或临时变量的整数码。登录项,或临时变量的整数码。简单赋值语句的翻译简单赋值语句的翻译语义函
24、数语义函数lookup(id.name),审查,审查id.name 是否出现在符号表中,返回指针值或是否出现在符号表中,返回指针值或nil。语义过程语义过程 emit(t:=arg1 op arg2)表示输表示输出四元式到输出文件。出四元式到输出文件。语义过程语义过程 newtemp 表示每调用一次,生成表示每调用一次,生成一新的临时变量。一新的临时变量。对变量先定义后检查。对变量先定义后检查。(1)S id:=E p:=lookup(id.name)if p nil then emit(p:=E.place)else error(2)EE1+E2 E.place:=newtemp;emit(
25、E.place:=E1.place+E2.place)(3)E E1*E2 E.place:=newtemp;emit(E.place:=E1.place*E2.place)产生式和语义动作描述产生式和语义动作描述(4)E-E1 E.place:=newtemp;emit(E.place:=uminus E1.place)(5)E(E1)E.place:=E1.place(6)Eid E.place:=newtemp;P:=lookup(id.name);if P nil then E.place:=P else error产生式和语义产生式和语义动作动作描述描述类型转换的语义处理类型转换的语
展开阅读全文