- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
武汉理工大学 DO-WHILE语句的翻译分析程序设计 ———递归下降法、输出四元式
DO-WHILE语句的翻译分析程序设计
———递归下降法、输出四元式
1问题描述
1.1问题描述
设计一个DO-WHILE循环语句的词法﹑语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。
1.2主要任务
通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
首先写出一个能识别DO-WHILE循环语句的文法,通过消除左递归使它符合LL(1)即递归下降法的要求,然后按照这个文法编写一个集词法分析,语法分析和语义分析为一体的程序,该程序首先可以检查输入语句是否符合词法要求,若符合则继续识别输入的语句是否符合DO-WHILE语句的文法,若符合则进行语义分析,输出用四地址代码表示的中间代码。
1.3测试数据
编写好源代码后,进行调试,根据程序要求进输入一小段程序,进行词法、语法的分析,给出分析结果。
2文法及属性文法的描述
2.1文法的描述
用扩充巴科斯-瑙尔范式(EBNF)while循环语句的文法描述,如下:
while语句do (条件语句 while{ 赋值语句
条件语句 ::= 表达式条件运算符 表达式
条件运算符 ::= | | = | = | =
表达式 ::= 表达式 + 表达式2 | 表达式 - 表达式2 | 表达式2
表达式2::=表达式2 * 表达式3 |表达式2 / 表达式3 | 表达式3
表达式3::=(表达式) | 标识符|数字
赋值语句::=标识符=表达式;
2.2 DO-while循环语句文法的描述
产生式为S- do E while A,为便于语法制导翻译将其改写如下:
文法G(s)如下:
S--DGWE (意思是do G while E)
G--c=R
R--dTe|d
T--+|-|*|/
E--aFb
F-- |==|
2.3 DO-WHILE循环语句的属性文法
产生式
语义规则
S→do E while A
S.begin:=newlabel;
E.true:=newlabel;
E.false:=S.next;
S1.next:=S.begin;
S.code:=gen(S.begin’:’‖E。code‖
gen(E.true’:’) ‖S1.code‖
gen(‘goto’ S.begin)
3.语法分析方法及中间代码形式的描述
3.1语法分析方法
递归下降程序是由一组子程序组成,每个子程序对应于一个非终结(S,A,B,C,D,E,F,G,H)。每个子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这些子程序也是递归的。当一个子程序调用另一个子程序时,原子程序顺序执行语句,即总是先执行被调用的子程序,然后再执行后继的程序。程序中9个子程序,其中S 是开始符号,也是递归下降分析的入口,通过调用词法分析器进行单词分析,并通过word=l.Yufa_Queue.front()来得到当前所分析到的单词,然后在递归语法分析中根据这个单词分析下一步要执行的子程序。其中要注意的是,当子程序G()和H()中出现匹配的是空字符串时,不做单词处理,该所取得的单词,应该为下一个匹配产生做准备。
它的优点是简单直观,易于构造,很多编译系统所实现。缺点是对文法要求很高,由于
递归调用多,影响分析器的效率。
其文法可以表示为:
E→T│E+T
T→F│T*F
F→i│(E)
可以用语法图来表示语言的文法,如图:
E
T
F
3.2中间代码形式描述
中间代码采用四元式输出,一个四元式是一个带有四个域的记录结构,这四个域分别称为op﹑arg1﹑arg2result。域op包含一个代表运算符的内部码。语句do c=a+b while ab的四元式输出形式如下:
100 ( + , a , b , T )
101 ( = , T , - , c )
102 ( j, a , b , 100 )
4.简要的分析与概要设计
4.1全局程序概要设计
递归下降分析技术就是通过对每个非终结符编写一个子程序来实现它的操作,然后通过递归的调用来实现对输入字符串的分析,这其中还包括对输入字符串的词法分析。在词法分析的时,得到的字符单词要和关键字比较,看是否是关键字,根据比较结果进行返回相应的单词类型
文档评论(0)