资源描述:
《编译原理综合训练-语义分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编译原理综合训练语义分析实验报告指导老师:班级:学生:zeadom学号:学生:学号:2011/6/29目录语言文法的形式化描述3语义规则3运行环境介绍5关键算法的流程图及文字解释51、本编译器的总框架52、在语义分析中的主要函数介绍53、产生布尔表达式74、While-do语句的语义分析85、词法、语法和语义分析的衔接8测试报告8附录12语言文法的形式化描述(BNF范式)程序开始P->programi;SDnSC;定义语句SDn->SDSDn
2、nullSD->varintiSDTSDT->null
3、,iSDT复合语句SC->beginSnendSn->S;Sn
4、
5、
6、null单个语句S->SD
7、SA
8、SIF
9、SW
10、SC赋值语句SA->i:=E算术表达式E->cET
11、iET
12、(E)ETET->AE
13、CE
14、DE
15、null;C->+
16、-
17、*
18、/;布尔表达式B->EAEBT
19、NOTB
20、(B)BTBT->DB
21、nullA->>
22、<
23、=
24、>=
25、<=
26、<>D->AND
27、ORif语句SIF->ifBthenSSELSESELSE->null
28、elseS2while语句SW->whileBdoS语义规则(属性文法)产生式语义规则i:=E{Gen(:=,E.PLACE,—,entry(i))}E®E1+E2{E.PLACE=Newtemp
29、;Gen(+,E1.PLACE,E2.PLACE,E.PLACE)}E®E1*E2{E.PLACE=Newtemp;Gen(*,E1.PLACE,E2.PLACE,E.PLACE)}E®-E1{E.PLACE=Newtemp;Gen(@,E1.PLACE,—,E.PLACE)}E®(E1){E.PLACE=E1.PLACE}E®i{E.PLACE=Entry(i)}产生式语义规则E®i{E.truelist:=makelist(nextquad);E.falselist:=makelist(nextquad+1);Gen(jnz,entry(i),—,0);G
30、en(j,—,—,0)}E®i1Ri2{E.truelist:=makelist(nextquad);E.falselist:=makelist(nextquad+1);Gen(jR,entry(i1),entry(i2),0);Gen(j,—,—,0)}E®┐E1{E.truelist:=E1.falselist;E.falselist:=E1.truelist;}E®(E1){E.truelist:=E1.truelist;E.falselist:=E1.falselist;}M®ε{M.quad:=nextquad;}E®E1∧ME2{backpatch
31、(E1.truelist,M.quad);E.truelist:=E2.truelist;E.falselist:=merge(E1.falselist,E2.Falselist)}E®E1∨ME2{backpatch(E1.falselist,M.quad);E.truelist:=merge(E1.truelist,E2.truelist);E.falselist:=E2.Falselist}E®E1∧ME2{backpatch(E1.truelist,M.quad);E.truelist:=E2.truelist;E.falselist:=merge(E
32、1.falselist,E2.Falselist)}产生式语义规则S®ifEthenMS1{backpatch(E.truelist,M.quad);S.nextlist:=merge(E.falselist,S1.nextlist)}M®ε{M.quad:=nextquad;}N®ε{N.nextlist:=makelist(nextquad);Gen(j,—,—,0)}S®ifEthenM1S1NelseM2S2{backpatch(E.truelist,M1.quad);backpatch(E.falselist,M2.quad);S.nextlist:
33、=merge(S1.nextlist,N.nextlist,S2.nextlist)}S®whileM1EdoM2S1{backpatch(S1.nextlist,M1.quad);Gen(j,—,—,M1.quad);backpatch(E.truelist,M2.quad);S.nextlist:=E.falselist}S®beginLend{S.nextlist:=L.nextlist}S®A{S.nextlist:=makelist()/*空链*/}L®S{L.nextlist:=S.nextlist}L®L1;MS{backpatch(L1.nex
34、tlist,M.quad);L.nex