资源描述:
《编译原理语义分析和中间代码生成实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、专题6」吾法制导翻译程序设计原理与实现技术13281132李若森计科1301一、实验目的语法制导的基本概念;目标代码结构分析的基本方法;赋值语句语法制导生成四元式的基本原理和方法;该过程包扌舌语法分析和语义分析过程。二、实验内容2.1实验项目完成以下描述赋值语句和算术表达式文法的语法制导生成中间代码四元式的过程。G[A]:A^V=EE-*E+T
2、E-T
3、TT-*T*F
4、T/F
5、FF-(E)
6、iV->i2.2设计说明终结符号i为用户定义的简单变量,即标识符的定义。2.3设计要求(1)设计语法制导翻译过程,给出每一产生式对应的语义动作
7、;(2)设计中I'可代码四元式的结构(暂不与符号表有关);(3)输入串应是词法分析的输出二元式序列,即某算术表达式“专题1”的输出结果。输出为输入串的四元式序列中间文件;(4)设计两个测试用例(尽可能完备),并给出程序执行结果。2.4任务分析重点解决赋值语句文法的改写和语义动作的添加。三、实现过程3.1扩展文法G[s]:A—V=EE-*E+T
8、E-T
9、TT-*T*F
10、T/F
11、FF-(E)
12、iV-*i3.2非终结符FOLLOW集FOLLOW(S)二{#}FOLLOW(A)二{#}FOLLOW(V)={FOLLOW(E)={FOLLO
13、W(T)={FOLLOW(F)={=}+,),#}+>->*>/>)>#}+,-j/,)>#}3.3LR(0)分析器的构造设DFAM的一个状态为i,该状态识别出的所有活前缀的有效项目集为Cio则DFAM的状态集Q={C0>CnC2,…,Cn}=CoC称为文法的LR(0)有效项目集规范族。对G有三种操作:■开始操作:S为开始符号,S->6贝ljS->-6GC0■闭包操作:cIosure(CjC:的闭包①Cj的任何项目均属于closure(Cj)②若Ata-XB且XEVn属于closure(Cj)则XT•入属于closure(Cj)重
14、复,直至closure©)不再增大.③Cj二closure(CJ■读操作:Go©,x)xGVGo(Cj,x)=Cj其中:Cd={ATax-
15、3
16、ATa・xPeCj求文法的LR(0)有效项目集规范族C的算法:①拓广文法,保证唯一初态.②生成Co二{ST-6}U{Sf・6的闭包操作}③重复以下过程,直至C不再增大为止.0读操作,生成Cj[,Cj2CjnCj「Cj2Cjn闭包操作(若其中某项目集已经存在就略去)由上述算法可求得有效项目集规范族C={C0>CnC2,…,C19}o3.3.1有效项目规范簇:C0={A,Af・V二E,Vf・i
17、}Cl={S—A・}C2={S~*V•=E}C3={V->i・}C4={S—V二・E,E—・E+T,E—・E・T,E—・T,T—・T*F,T—・T/F,T->・F,F—・(E),F—・i}C5={S->V=E«,E-E・+T,E-E--T}C6={E-*T・,T-*T・*F,T-T-/F}C7={T-F・}C8={F—(・E),E—・E+T,E—・E・T,E—・T,T—・T*F,T—・T/F,T->・F,F—・(E),F—・i}Cg={F-i・}C10={E->E+・T,T-・T*F,T-・T/F,T-・F,F-・(E),F-・i
18、}Cn={E-*E--T,T->・T*F,・T/F,T-・F,F—・(E),F-・i}C12={T-T*・F,F-・(E),F-・i}C13={T->T/・F,F-・(E),F-・i}C14={F-(E•力E-*E・+T,E-*E«-T}C15={E-E+T・,T-T・*F,T-*T・/F}C16={E-E・T・,T->T・*F,T->T・/F}C17={T-T*F・}Cis={T-T/F・}C19={F-*(E)•}3.3.2冲突项目:定义:(1)既含移进项目,又含归约项目(2)含有多个归约项目在项目集中存在冲突项目:C5:FO
19、LLOW(S)n{+,-}={#}门{+,—}=0c6:FOLLOW(E)A{S/}={+,-,),#}n{*,/}=0c15:FOLLOW(E)n{s/}=#}n{*,/}=0C16:FOLLOW(E)“{*,/}=#}n{*,/}=0冲突可解决,所以语义分析采用SLR(l)分析法分析。3.4SLR(l)分析法LR(0)有效项目集规范族C中,若一个项0集含有m个移进项目,同吋含n个归约项目,即Q={U1ta.bxp,U2a.b2pf,,Um->a.bmp,Vra.,V2a.,Vn->a.}若{blfb2>・・・・・・"J,FOL
20、LOW(Vi),…,FOLLOW(Vn)两两互不相交,满足此条件的文法为SLR(l)文法,可用SLR(l)分析方法解决。SLR⑴分析法=LR(0)分析法+冲突解决办法Ci={U->a.bp,V->a./W->a.}(beVT)◎对输入符号a■a=b