- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FOR循环语句的翻译程序设计
——LL(1)法、输出四元式
1.系统描述
1.1问题描述
用LL(1)法设计、编制、调试一个FOR(表达式1;表达式2;表达式3)〈赋值语句〉的语法及语义分析程序,输出四元式。
1.2功能描述
(1)能够识别出单词、单词类型、单词位置
(2)能够用LL(1)方法识别单词序列是否符合FOR循环文法
(3)能够完成对FOR循环中3个表达式的翻译
(4)能够完成对FOR循环中赋值语句(含复杂表达式)的翻译
(5)能够对FOR循环3个表达式中有表达式1或3缺少时翻译
(6)能够用标准化的四元式进行翻译结果输出
(7)0 A-f(B){Y} { f } 1 B-CDG { ;,i } 2 Y-( { } } 3 Y-m=E { m } 4 C-; { ; } 5 C-i=E { i } 6 D-iF; { i } 7 F-E; { } 8 F-E { } 9 G-( { ) } 10 G-i=E { i } 11 E-LM { (,i } 12 M-+LM { +} 13 M--LM { - } 14 M-( { ),; } 15 L-NP { (,i } 16 P-*NP { * } 17 P-/NP { / } 18 P-( { +,-,),;} 19 N-i { i } 20 N-(E) { ( }
3.3 预测分析表设计
表达式文法的预测分析表
f i m ; + - * / ( ) { } = A 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 B -1 1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 C -1 5 -1 4 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 D -1 6 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 E -1 11 -1 -1 -1 -1 -1 -1 -1 -1 11 -1 -1 -1 -1 F -1 -1 -1 -1 7 8 -1 -1 -1 -1 -1 -1 -1 -1 -1 G -1 10 -1 -1 -1 -1 -1 -1 -1 -1 -1 9 -1 -1 -1 L -1 15 -1 -1 -1 -1 -1 -1 -1 -1 15 -1 -1 -1 -1 M -1 -1 -1 14 -1 -1 12 13 -1 -1 -1 14 -1 -1 -1 N -1 19 -1 -1 -1 -1 -1 -1 -1 -1 20 -1 -1 -1 -1 P -1 -1 -1 18 -1 -1 18 18 16 17 -1 18 -1 -1 -1 Y -1 -1 3 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 2 -1 说明:
1. 第1列为终结符,第1行为非终结符
2. 非终结符与终结符的交点出表示将要选择哪个产生式做预测分析进行推导
3. -1表示出错,其余数字为产生式的序号NO,表示选择相应的产生式
4.间代码形式的描述及中间代码序列的结构设计
4.1 四元式描述
四元式是一种比较普遍采用的中间代码形式。四元式的四个组成部分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT,运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。
例如a=b*c+b*d的四元式表示如下:
(1)(* ,b,c,t1)
(2)(* ,b,d,t2)
(3)(+ ,t1,t2,t3)
(4)(= ,t3,-, a)
四元式表示很类似于三地址指令,有时把这类中间表示称为“三地址代码”,因为这种表示可以看成一种虚拟三地址机的通用汇编码,即这种虚拟机的每条“指令”包含操作符和三个地址,两个是为运算对象的,一个为结果的。
有时为了更直观,也把四元式写成简单赋值形式。
t1=b*c
t2=b*d
t3=t1+t2
a=t3
把(jump,—,—,L)写成goto L
把(jrop,B,C,L)写成if B rop C goto L
我采用的是更直观的形式。
4.2 中间代码序列的结构设计
以for(i=0;in;i=i+1){m=(n-1)/5-3*2;}为例:
中间代码序列的结构应如下:
i=0
2. if in goto 4
3. goto 11
4. t1=n-1
5. t2=t1/5
6. t3=3*2
7. t4=t2-t3
8. m=t4
9. i=i+1
10. goto 2
11.
我的中间代码结构是这样设计的:
语句输出表达式1,表
文档评论(0)