如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
编译原理综合训练语义分析实验报告指导老师:班级:学生:zeadom学号:学生:学号:2011/6/29目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc297722858"语言文法的形式化描述PAGEREF_Toc297722858\h3HYPERLINK\l"_Toc297722859"语义规则PAGEREF_Toc297722859\h3HYPERLINK\l"_Toc297722860"运行环境介绍PAGEREF_Toc297722860\h5HYPERLINK\l"_Toc297722861"关键算法的流程图及文字解释PAGEREF_Toc297722861\h5HYPERLINK\l"_Toc297722862"1、本编译器的总框架PAGEREF_Toc297722862\h5HYPERLINK\l"_Toc297722863"2、在语义分析中的主要函数介绍PAGEREF_Toc297722863\h5HYPERLINK\l"_Toc297722864"3、产生布尔表达式PAGEREF_Toc297722864\h7HYPERLINK\l"_Toc297722865"4、While-do语句的语义分析PAGEREF_Toc297722865\h8HYPERLINK\l"_Toc297722866"5、词法、语法和语义分析的衔接PAGEREF_Toc297722866\h8HYPERLINK\l"_Toc297722867"测试报告PAGEREF_Toc297722867\h8HYPERLINK\l"_Toc297722868"附录PAGEREF_Toc297722868\h12语言文法的形式化描述(BNF范式)程序开始P->programi;SDnSC;定义语句SDn->SDSDn|nullSD->varintiSDTSDT->null|,iSDT复合语句SC->beginSnendSn->S;Sn||null单个语句S->SD|SA|SIF|SW|SC赋值语句SA->i:=E算术表达式E->cET|iET|(E)ETET->AE|CE|DE|null;C->+|-|*|/;布尔表达式B->EAEBT|NOTB|(B)BTBT->DB|nullA->>|<|=|>=|<=|<>D->AND|ORif语句SIF->ifBthenSSELSESELSE->null|elseS2while语句SW->whileBdoS语义规则(属性文法)产生式语义规则i:=E{Gen(:=,E.PLACE,—,entry(i))}EE1+E2{E.PLACE=Newtemp;Gen(+,E1.PLACE,E2.PLACE,E.PLACE)}EE1*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}Ei{E.PLACE=Entry(i)}产生式语义规则Ei{E.truelist:=makelist(nextquad);E.falselist:=makelist(nextquad+1);Gen(jnz,entry(i),—,0);Gen(j,—,—,0)}Ei1Ri2{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;}EE1∧ME2{backpatch(E1.truelist,M.quad);E.truelist:=E2.truelist;E.falselist:=merge(E1.falselist,E2.Falselist)}EE1∨ME2{backpatch(E1.falselist,M.quad);E.truelist:=merge(E1.tru