中间代码生成_第1页
中间代码生成_第2页
中间代码生成_第3页
中间代码生成_第4页
中间代码生成_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中间代码生成第一页,共九十三页,编辑于2023年,星期六例如:表达式A+B*C对运算对象进行类型检查,对变量进行先定义后使用检查如果静态语义正确,语义处理则要执行真正的翻译,即生成程序的某种中间代码的形式或直接生成目标代码。执行真正的翻译第7章语法制导翻译技术和中间代码生成第二页,共九十三页,编辑于2023年,星期六目前多数编译程序进行语义分析的方法是采用语法制导翻译法。它不是一种形式系统,但它比较接近形式化。

语法制导翻译法使用属性文法为工具来描述程序设计语言的语义。第7章语法制导翻译技术和中间代码生成第三页,共九十三页,编辑于2023年,星期六(1)属性对文法的每一个符号,引进一些属性,这些属性代表与文法符号相关的信息,如类型、值、存储位置等。与属性相关的信息,即属性值,可以在语法分析过程中计算和传递。1.属性文法第7章语法制导翻译技术和中间代码生成第四页,共九十三页,编辑于2023年,星期六属性分为两类: 综合属性其计算规则按“自下而上”方式进行,即规则左部符号的某些属性根据其右部符号的属性和(或)自己的其他属性计算得到。属性加工的过程即是语义的处理过程。综合属性和继承属性。第7章语法制导翻译技术和中间代码生成第五页,共九十三页,编辑于2023年,星期六 继承属性其计算规则按“自上而下”方式进行,即规则右部符号的某些属性根据其左部符号的属性和(或)右部其他符号的某些属性计算得到。第7章语法制导翻译技术和中间代码生成第六页,共九十三页,编辑于2023年,星期六(2)属性文法为文法的每一个规则配备的计算属性的计算规则,称为语义规则(描述语义处理的加工动作)。属性文法包含一个上下文无关文法和一系列语义规则。语义规则:第7章语法制导翻译技术和中间代码生成第七页,共九十三页,编辑于2023年,星期六这些语义规则附在文法的每个产生式上,在语法分析过程中,执行语义规则描述的动作,从而实现语义处理。也就是说,附在文法的每个产生式上语义规则描述了语义处理的加工动作。目前流行的语义描述和语义处理的方法主要是属性文法和语法制导翻译方法。第7章语法制导翻译技术和中间代码生成第八页,共九十三页,编辑于2023年,星期六2.语法制导翻译法

为文法的每个产生式都配备一个语义动作或语义子程序。在语法分析的过程中,每当使用一条产生式进行推导或归约时,就执行相应产生式的语义动作,从而实现语义处理。第7章语法制导翻译技术和中间代码生成(1)语法制导翻译法的基本思想第九页,共九十三页,编辑于2023年,星期六S→……{……}………A→xy{……}………

a1a2a3…aiai+1…an语义处理的加工动作语法制导翻译法使用属性文法为工具来说明程序设计语言的语义。第7章语法制导翻译技术和中间代码生成第十页,共九十三页,编辑于2023年,星期六(2)语法制导翻译法在语法分析过程中,依随分析的过程,根据每个产生式所对应的语义子程序(或语义规则描述的语义处理的加工动作)进行翻译的方法。第7章语法制导翻译技术和中间代码生成第十一页,共九十三页,编辑于2023年,星期六 为文法每一产生式设计相应的求值的语义描述(语义动作):例如,设有简单算术表达式的文法:E→E+E|E*E|(E)|digit1.E→E(1)+E(2)

{E.val=E(1).val+E(2).val}2.E→E(1)*E(2)

{E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}第7章语法制导翻译技术和中间代码生成第十二页,共九十三页,编辑于2023年,星期六E.val=47E.val=8E.val=40E.val=7E.val=5+5*871.E→E(1)+E(2)

{E.val=E(1).val+E(2).val}2.E→E(1)*E(2)

{E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}句子7+8*5EEEEE第十三页,共九十三页,编辑于2023年,星期六

3.

编译中常用的中间代码:逆波兰式四元式三元式树形表示第7章语法制导翻译技术和中间代码生成第十四页,共九十三页,编辑于2023年,星期六逆波兰式

逆波兰式除去了原表达式中的括号,并将运算对象写在前面,运算符写在后面,因而又称为后缀式。例如:逆波兰式a*bab*(a+b)*(c+d)ab+cd+*中缀表达式第7章语法制导翻译技术和中间代码生成第十五页,共九十三页,编辑于2023年,星期六逆波兰式表示法同中缀表示法相比其优点是:不再有括号,且运算符出现的顺序体现了中缀表达式的运算顺序2.易于计算机处理第7章语法制导翻译技术和中间代码生成第十六页,共九十三页,编辑于2023年,星期六一般表达式计值时,要处理两类符号,一类是运算对象,另一类是运算符,通常用两个工作栈分别处理。但处理用逆波兰式表示的表达式却只用一个工作栈。第7章语法制导翻译技术和中间代码生成第十七页,共九十三页,编辑于2023年,星期六当计算机自左到右顺序扫描逆兰波式时,若当前符号是运算对象则进栈,若当前符号是运算符,设为K元运算符,则将栈顶的K个元素依次取出,同时进行K元运算,并将运算结果置于栈顶,表达式处理完毕时,其计算结果自然呈现在栈顶。第7章语法制导翻译技术和中间代码生成第十八页,共九十三页,编辑于2023年,星期六逆波兰式ab+c*的处理过程如下图:baT1第7章语法制导翻译技术和中间代码生成cT1T2第十九页,共九十三页,编辑于2023年,星期六逆波兰形式可以推广到其他语法结构:赋值语句V=E逆波兰式VE=条件语句逆波兰式ifES1;elseS2ES1S2¥第7章语法制导翻译技术和中间代码生成第二十页,共九十三页,编辑于2023年,星期六三元式和树形表示三元式主要由三部分组成:(OP,arg1,arg2)其中OP是运算符,arg1,arg2分别是第一和第二个运算对象。当OP是一目运算时,常常将运算对象定义为arg1。第7章语法制导翻译技术和中间代码生成第二十一页,共九十三页,编辑于2023年,星期六例如a+b*c

的三元式序列:

(1)(*,b,c)

(2)(+,a,(1)) 运算对象是指向符号表的某一项或指向三元式表的某一项。第7章语法制导翻译技术和中间代码生成第二十二页,共九十三页,编辑于2023年,星期六1.三元式出现的顺序和语法成分的计值顺序相一致。三元式的特点:2.三元式之间的联系是通过指示器实现的。第7章语法制导翻译技术和中间代码生成第二十三页,共九十三页,编辑于2023年,星期六间接三元式(1)间接三元式表:用来存放各三元式本身。(2)间接码表:按执行各三元式的顺序,依次列出各三元式在三元式表中的位置。注意:间接三元式表中不存放重复的三元式。第7章语法制导翻译技术和中间代码生成第二十四页,共九十三页,编辑于2023年,星期六例如语句X=(A+B)*C

Y=D↑(A+B)三元式序列(1)(+,A,B)(2)(*,(1),C)(3)(=,X,(2))(5)(↑,D,(4))(4)(+,A,B)(6)(=,Y,(5))间接三元式间接码表三元式表(1)(2)(3)(1)(4)(5)(1)(+,A,B)(2)(*,(1),C)(3)(=,X,(2))(4)(↑,D,(1))(5)(=,Y,(4))第7章语法制导翻译技术和中间代码生成第二十五页,共九十三页,编辑于2023年,星期六树形表示

A*B+C*D+C*A*BD末端结点表示一个运算对象,每一个内结点表示一个一元或二元运算符。树形表示是三元式的翻版(3)+(1)*(2)*CABD第7章语法制导翻译技术和中间代码生成第二十六页,共九十三页,编辑于2023年,星期六四元式主要由四部分组成:(OP,arg1,arg2,result)其中OP是运算符,arg1,arg2分别是第一和第二两个运算对象。当OP是一目运算时,常常将运算对象定义为arg1。第7章语法制导翻译技术和中间代码生成第二十七页,共九十三页,编辑于2023年,星期六四元式的第四个分量result是编译程序为存放中间运算结果而临时引进的变量,常称为临时变量,如Ti,也可以是用户自定义变量,如X。例如X=a*b+c/d

的四元式序列:(1)(*,a,b,T1)(2)(/,c,d,T2)(3)(+,T1,T2,T3)(4)(=,T3,-,X

)第7章语法制导翻译技术和中间代码生成第二十八页,共九十三页,编辑于2023年,星期六2.四元式之间的联系是通过临时变量实现的,这样易于调整和变动四元式。1.四元式出现的顺序和语法成份的计值顺序相一致。四元式的特点:3.便于优化处理。第7章语法制导翻译技术和中间代码生成第二十九页,共九十三页,编辑于2023年,星期六编译系统中,有时将四元式表示成另一种更直观,更易理解的形式——三地址代码或三地址语句。result:=arg1OParg2

三地址语句:语句中是三个量的赋值语句,每个量占一个地址。三地址代码形式定义为:第7章语法制导翻译技术和中间代码生成第三十页,共九十三页,编辑于2023年,星期六例如X=a*b+c/d的四元式序列:(1)(*,a,b,T1)(2)(/,c,d,T2)(3)(+,T1,T2,T3)(4)(=,T3,-,X

)相应的三地址语句序列为:(1)T1=a*b(2)T2=c/d(3)T3=T1+T2

(4)X=T3

第7章语法制导翻译技术和中间代码生成第三十一页,共九十三页,编辑于2023年,星期六例1.–a+b*(–c+d)的逆波兰式a@bc@d+*+第7章语法制导翻译技术和中间代码生成第三十二页,共九十三页,编辑于2023年,星期六t1=@a

t2=@c

t3=t2+dt5=t1+t4

–a+b*(–c+d)的四元式表示

t4=b*t3第7章语法制导翻译技术和中间代码生成第三十三页,共九十三页,编辑于2023年,星期六i↑(i/(i–i))的逆波兰式

i↑(i/(i–i))的四元式

t1=i–i

t2=i/t1t3=i↑t2iiii–/↑例2.第7章语法制导翻译技术和中间代码生成第三十四页,共九十三页,编辑于2023年,星期六4.采用自下而上的语法制导翻译法语义动作的设计(1)搞清楚源结构和目标结构(2)自下而上的语法制导翻译特点:栈顶形成句柄,归约时执行相应语义动作(3)给出从源结构到目标结构的变换方法第7章语法制导翻译技术和中间代码生成第三十五页,共九十三页,编辑于2023年,星期六例1.设文法及其相应的语义动作如下:

S→bTc{print“1”}

S→a{print“2”}

T→R{print“3”}

R→R/S{print“4”}

R→S{print“5”}采用自下而上语法制导翻译,给出输入串bR/bTc/bSc/ac的翻译结果第7章语法制导翻译技术和中间代码生成第三十六页,共九十三页,编辑于2023年,星期六分析:首先对输入串

bR/bTc/bSc/ac画出规范规约的语法树:ScTbRS/R/RS/RcTbaScTbRS再考虑归约时执行相应语义动作第7章语法制导翻译技术和中间代码生成第三十七页,共九十三页,编辑于2023年,星期六

S→bTc{print“1”}

S→a{print“2”}

T→R{print“3”}

R→R/S{print“4”}

R→S{print“5”}14翻译结果为:53142431第7章语法制导翻译技术和中间代码生成cTbRS/R/RS/RcTbaScTbRSS第三十八页,共九十三页,编辑于2023年,星期六

R→R/S

S→bTc

S→a

T→R

R→S输出为:1453142431输入是bR/bTc/bSc/ac给出相应语义动作(翻译方案){print“1”}{print“2”}{print“3”}{print“4”}{print“5”}第7章语法制导翻译技术和中间代码生成cTbRS/R/RS/RcTbaScTbRSS第三十九页,共九十三页,编辑于2023年,星期六例2简单算术表达式求值的语义描述例如,设有简单算术表达式的文法:E→E+E|E*E|(E)|digit1.E→E(1)+E(2)

{E.val=E(1).val+E(2).val}2.E→E(1)*E(2)

{E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}第7章语法制导翻译技术和中间代码生成第四十页,共九十三页,编辑于2023年,星期六例3简单算术表达式翻译到四元式的语义描述例如,设有简单算术表达式的文法:E→E+E|E*E|(E)|i第7章语法制导翻译技术和中间代码生成第四十一页,共九十三页,编辑于2023年,星期六E→E+E∣E*E∣(E)|i源结构目标结构(1)T1=a*b(2)T2=c*d(3)T3=T1+T2

a*b+c*d第7章语法制导翻译技术和中间代码生成第四十二页,共九十三页,编辑于2023年,星期六语义函数emit(T=arg1OParg2)

功能是生成一个三地址语句,并送到输出文件中。语义函数newtemp()

功能是产生一个新的临时变量名字,并回送新的临时变量名的整数码。如T1,T2等。第7章语法制导翻译技术和中间代码生成第四十三页,共九十三页,编辑于2023年,星期六(2)不进符号表,临时变量单词值部分用整数码表示。(1)送到符号表。对临时变量有两种不同的处理方法:第7章语法制导翻译技术和中间代码生成第四十四页,共九十三页,编辑于2023年,星期六语义过程Lookup()

功能是审查是否出现在符号表中,在则返回其指针,否则返回NULL。语义变量E.place

表示存放非终结符E值的变量名在符号表中的入口地址或临时变量名的整数码。第7章语法制导翻译技术和中间代码生成第四十五页,共九十三页,编辑于2023年,星期六1.E→E(1)+E(2)2.E→E(1)*E(2){E.place=newtemp();emit(E.place=E(1).place+E(2).place)}{E.place=newtemp();emit(E.place=E(1).place*E(2).place)}第7章语法制导翻译技术和中间代码生成第四十六页,共九十三页,编辑于2023年,星期六3.E→(E(1)){E.place=E(1).place;}4.E→i{p=Lookup();if(p!=NULL)E.place=p;elseerror();}第7章语法制导翻译技术和中间代码生成第四十七页,共九十三页,编辑于2023年,星期六90状态ACTIONGOTO+

i*()#ES3S9S5S4S2S3S2S3S5S4S2S5S2S3r4r4r4r4r1r1r1r2r3r2r3r3r2r2r3123456781678acc2.为文法构造LR分析表如下图:第7章语法制导翻译技术和中间代码生成第四十八页,共九十三页,编辑于2023年,星期六3.算术表达式a+b*c翻译到三地址语句的过程:030##a01#E014#E+0143#E+b-a-a--a--状态栈符号栈语义栈输入串a+b*c#+b*c#+b*c#b*c#*c#---变量在符号表的入口用变量本身表示第7章语法制导翻译技术和中间代码生成E→E+E|E*E|(E)|i第四十九页,共九十三页,编辑于2023年,星期六*c#c#####t1=b*ct2=a+t1

状态栈符号栈语义栈输入串014750147#E+E#E+E*014753#E+E*c014758#E+E*E0147#E+E01#E-a-b---a-b-c-a-t1-a-b--a-b-t2acc第7章语法制导翻译技术和中间代码生成E→E+E|E*E|(E)|i第五十页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译一.布尔表达式的文法●计算逻辑值程序设计语言中布尔表达式有两个作用:

●用作控制语句中的条件式布尔表达式是由布尔算符(∧、∨和)施于布尔变量或关系表达式而成。

第五十一页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译

E→E(1)∨E(2)

E→E(1)∧E(2)

E→E(1)

E→(E(1))

E→i(1)ropi(2)

E→true

E→false

E→i第五十二页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译二.布尔表达式的计值方法1.如同计算算术表达式一样,逐步计算出各部分真、假值,最后计算出整个表达式的值。2.根据布尔运算的特殊性,采取某种优化措施,可避免计算整个表达式的值。第五十三页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译

A∨B

解释成

A∧B

解释成

A

解释成ifAthentrueelseBifAthenBelsefalseifAthenfalseelsetrue三.布尔表达式的翻译方法1.同翻译算术表达式一样,翻译布尔表达式。第五十四页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译1.E→E(1)∨E(2){E.place=newtemp();

emit(E.place=E(1).place∨E(2).place)}2.E→E(1)∧E(2){E.place=newtemp();

emit(E.place=E(1).place∧E(2).place)}第五十五页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译3.E→(E(1)){E.place=E(1).place;}4.E→i(1)ropi(2){E.place=newtemp();

emit(ifi(1).placerop.opi(2).place‘goto’next+3);emit(E.place=‘0’);emit(gotonext+2);emit(E.place=‘1’);}当前四元式的编号第五十六页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译5.E→true

{E.place=newtemp();

emit(E.place=‘1’)}{E.place=newtemp();

emit(E.place=‘0’)}6.E→false

或{E.place=i.place;}6.E→i

第五十七页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译 例如布尔表达式a==b∨c∧d对应如下四元式序列:101ifa==bgoto104102t1=0103goto105104t1=1105t2=c∧d106t3=t1∨

t2

第五十八页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译2.控制语句中布尔表达式的翻译条件语句的语法为:根据条件语句的语义,条件语句的代码结构为:ifEthenS(1)elseS(2)E的代码S(1)的代码S(2)的代码Jumpout

out:

假第五十九页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译

E是布尔表达式,根据布尔运算的特殊性,布尔表达式的目标结构为:假E(1)的代码∨E(2)的代码真S(1)S(2)真假真E(1)的代码∧E(2)的代码假S(2)S(1)假真第六十页,共九十三页,编辑于2023年,星期六(1)真出口和假出口:真出口表示布尔表达式E为真时控制流向的转移目标假出口表示布尔表达式E为假时控制流向的转移目标布尔表达式到四元式的翻译第六十一页,共九十三页,编辑于2023年,星期六(2)作为条件转移的E,把E翻译成的代码是一串条件转或无条件转的四元式对于E为aropb的形式生成代码为:

ifaropbgoto真出口

goto假出口布尔表达式到四元式的翻译第六十二页,共九十三页,编辑于2023年,星期六(q) 例如语句ifa<b∨c<dthenS(1)elseS(2)

的四元式为:100ifa<bgoto真出口

101goto假出口102ifc<dgoto真出口

103goto假出口104(关于S(1)

的四元式)……(p)goto(q)(p+1)(关于S(2)

的四元式)……布尔表达式到四元式的翻译E(1)的真出口E->

E(1)VE(2)E(2)的真出口第六十三页,共九十三页,编辑于2023年,星期六(q) 例如语句ifa<b∨c<dthenS(1)elseS(2)

的四元式为:100ifa<bgoto104101goto102102ifc<dgoto104103goto(p+1)104(关于S(1)

的四元式)……(p)goto(q)(p+1)(关于S(2)

的四元式)E(1)的真出口为104,E(1)的假出口为102E(2)的真出口为104,E(2)的假出口为(p+1)E的真出口为104,E的假出口为(p+1)……布尔表达式到四元式的翻译第六十四页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译 布尔表达式的真、假出口不能在产生其四元式的同时得知。 例如E(1)的真出口为104需分析到S(1)时才能得知,因此需回填出口地址E.tr:记录表达式E所对应的四元式需回填真出口的四元式的地址所构成的链E.fa:记录表达式E所对应的四元式需回填假出口的四元式的地址所构成的链(3)设置两个语义变量:第六十五页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译E(1).tr=100,

E(1).fa=101E(2).tr=102,

E(2).fa=103(q) 例如语句ifa<b∨c<dthenS(1)elseS(2)

的四元式为:100ifa<bgoto真出口

101goto假出口102ifc<dgoto真出口

103goto假出口104(关于S(1)

的四元式)……(p)goto(q)(p+1)(关于S(2)

的四元式)……第六十六页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译E.fa=103;E.tr=100和102所构成的链

E(1)∨E(2)归约E时,第六十七页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译 把以p1,p2为链首的两条链合并为一,返回合并后的链首(4)链结函数和回填函数:●merg(p1,p2):第六十八页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译

}merg(intp1,intp2){ifp2=0return(p1);else{p=p2;

while(四元式p的第四分量内容不为0)

p=四元式p的第四分量内容;

把p1填进四元式p的第四分量;

return(p2);

}返回的链首应该是回填相同数字的四元式最后一个的编号第六十九页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译r1(× × × 0)q1(× × × r1)q2(× × × r2)p1(× × × q1)r2(× × × 0)p2(× × × q2)p1第七十页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译

}merg(intp1,intp2){ifp2=0return(p1);else{p=p2;

while(四元式p的第四分量内容不为0)

p=四元式p的第四分量内容;

把p1填进四元式p的第四分量;

return(p2);

}100102102第七十一页,共九十三页,编辑于2023年,星期六(q)例如语句ifa<b∨c<dthenS(1)elseS(2)

的四元式为:100ifa<bgoto0101goto102102ifc<dgoto100

103goto(p+1)104(关于S(1)

的四元式)……(p)goto(q)(p+1)(关于S(2)

的四元式)……布尔表达式到四元式的翻译第七十二页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译●bp(intp,intt):

将p所链结的每个四元式的第四分量都回填t;第七十三页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译}bp(intp,intt){q=p;while(q!=0){r=四元式q的第四分量内容;

把t填进四元式q的第四分量;

q=r;

}1021041000102100第七十四页,共九十三页,编辑于2023年,星期六(q) 例如语句ifa<b∨c<dthenS(1)elseS(2)

的四元式为:100ifa<bgoto104101goto102102ifc<dgoto104

103goto(p+1)104(关于S(1)

的四元式)……(p)goto(q)(p+1)(关于S(2)

的四元式)……布尔表达式到四元式的翻译第七十五页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译(5)为及时回填转移地址,使用语义变量E.code记录表达式E的第一个四元式语句序号。(6)定义语义变量next为四元式表指针。E(1).code=100E(2).code=102E.code=100第七十六页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译布尔表达式语义动作的设计1.E→E(1)∨E(2){bp(E(1).fa,E(2).code);

E.code=E(1).code;E.tr=merg(E(1).tr,E(2).tr);E.fa=E(2).fa;}第七十七页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译布尔表达式语义动作的设计2.E→E(1)∧E(2){bp(E(1).tr,E(2).code);

E.code=E(1).code;E.tr=E(2).tr;E.fa=merg(E(1).fa,E(2).fa);}第七十八页,共九十三页,编辑于2023年,星期六布尔表达式语义动作的设计3.E→(E(1)){E.code=E(1).code;E.tr=E(1).tr;E.fa=E(1).fa;}布尔表达式到四元式的翻译第七十九页,共九十三页,编辑于2023年,星期六布尔表达式语义动作的设计4.E→i(1)ropi(2){E.tr=next;E.code=next;E.fa=next+1;emit(ifi(1).placerop.opi(2).placegoto_);emit(goto_);}布尔表达式到四元式的翻译第八十页,共九十三页,编辑于2023年,星期六布尔表达式语义动作的设计5.E→true{E.tr=next;E.code=next;emit(goto_);}布尔表达式到四元式的翻译第八十一页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译布尔表达式语义动作的设计6.E→false{E.fa=next;E.code=next;emit(goto_);}第八十二页,共九十三页,编辑于2023年,星期六布尔表达式到四元式的翻译布尔表达式语义动作的设计5.E→i{E.tr=next;E.fa=next+1;E.code=next;emit(ifi.placegoto-);emit(goto_);}5.E→true6.E→false第八十三页,共九

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论