条件语句的翻译分析程序设计

条件语句的翻译分析程序设计

ID:14733199

大小:61.50 KB

页数:42页

时间:2018-07-30

条件语句的翻译分析程序设计_第1页
条件语句的翻译分析程序设计_第2页
条件语句的翻译分析程序设计_第3页
条件语句的翻译分析程序设计_第4页
条件语句的翻译分析程序设计_第5页
资源描述:

《条件语句的翻译分析程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、条件语句的翻译分析程序设计条件语句的翻译分析程序设计  --LR方法、输出四元式1.问题描述对条件语句:if〈布尔表达式〉〈赋值语句〉else〈赋值语句〉,进行词法,语法分析,并根据语法制导翻译方法将条件语句翻译成四元式中间代码形式,最后输出翻译后的四元式代码。2.文法及属性文法描述2.1if-else语句的LR文法:采用LR方法,因此可以得到如下文法:G[S]:S→if(B)SelseS  S→if(B)S  S→i=E  B→B&&BB→B

2、

3、BB→!BB→ErelopE  E→E+E       E→E

4、*E       E→-E       E→(E)       E→i  其中relop是终结符号,代表关系运算符<,<=,>,>=,!=等。  通过一遍扫描来产生布尔表达式和控制语句的代码的主要问题在于,当生成某些转移语句时还不知道该语句将要转移到的目标是什么。为了解决这个问题,可以在生成形式分之的跳转指令时暂时不确定跳转目标,而建立一个链表,把转向这个目标的跳转指令的标号键入这个链表。一旦目标确定后再把它填入有关的跳转指令中,因此将上述文法扩展为:  P→SM  S→if(B)M1S1NelseM2S2 

5、 S→if(B)MS1  S→i=E  B→B1&&MB2  B→B1

6、

7、MB2  B→!B1  B→E1relopE2  E→E1+E2  E→E1*E2  E→-E1  E→(E1)  E→i  M→¢;代表的是空    N→¢;代表的是空2.2if-else语句的LR属性文法: 由以上扩展的文法可得到如下的属性文法:P→SM   {if(S.nextlist!=¢)thenbackpatch(S.nextlist,M.pos);   }S→if(B)M1S1NelseM2S2{backpatch(B.t

8、ruelist,M1.pos);backpatch(B.falselist,M2.pos);S.nextlist=merge(S1.nextlist,S2.nextlist);S.nextlist=merge(S.nextlist,N.nextlist);}S→if(B)MS1{backpatch(B.truelist,M.pos);S.nextlist=merge(B.falselist,S1.nextlist);}S→i=E   {p=lookup(i.name);   if(p!=Nullthengen

9、quad("=",E.place,"",p.place);   }   B→B1&&MB2   {backpatch(B1.truelist,M1.pos);    B.truelist=B2.truelist;    B.falselist=merge(B1.falselist,B2.falselist);    }   B→B1

10、

11、MB2{backpatch(B1.falselist,M1.pos);B.truelist=B2.truelist;   B.falselist=merge(B1.trueli

12、st,B2.truelist);   B.falselist=B2.falselist;   }B→!B1  {B.truelist=B1.falselist;B.falselist=B2.falselist;   }  B→E1relopE2  {B.truelist=makelist(nexpos+1);  B.false=makelist(nextpos+2);  genquad(relop,E1.place,E2.place,"_");  genquad("J","","","_");}  E→E1+

13、E2  {e=newtemp;  e.place=E1.place+E2.place;    genquad("+",E1.place,E2.place,e.place);}  E→E1*E2  {e=newtemp;  e.place=E1.place*E2.place;genquad("*",E1.place,E2.place,e.place);}  E→-E1{e=newtemp;e.place=-E.place;   genquad("uminus",E.place,"",e.place);}  E→

14、(E1)  {E.place=E1.place;}  E→i  {E.place=i.value;  }  M→¢{M.pos=nextpos+1;}   N→¢   {N.next=makelist(nextpos+1);    genquad("J","","","_");   }  其中relop可为任意的关系运算符,i可以为标识符,也可以为常数。M以及N是为了便于分析生成四元式而设的。3.语

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。