for循环语句的翻译程序设计

for循环语句的翻译程序设计

ID:8805322

大小:399.40 KB

页数:17页

时间:2018-04-08

for循环语句的翻译程序设计_第1页
for循环语句的翻译程序设计_第2页
for循环语句的翻译程序设计_第3页
for循环语句的翻译程序设计_第4页
for循环语句的翻译程序设计_第5页
资源描述:

《for循环语句的翻译程序设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、武汉理工大学《编译原理》课程设计说明书目录1系统描述(问题域描述)21.1目的21.2设计步骤21.3系统体系结构描述22文法及属性文法的描述32.1文法32.2属性文法33语法分析方法描述及语法分析表设计53.1语法分析方法53.2语法分析表设计64中间代码形式的描述及中间代码序列的结构设计64.1中间代码形式描述64.2中间代码序列的结构设计75编译系统的概要设计75.1系统分析75.1.1词法分析75.1.2语法分析85.1.3中间代码生成85.2概要设计95.2.1系统总体设计图95.2.

2、2数据结构96详细的算法描述(流程图或伪代码)106.1词法分析106.2语法分析117软件的测试方法和测试结果127.1软件测试方法127.2测试结果127.2.1简单for循环语句(无嵌套)127.2.2for循环嵌套语句148研制报告168.1研制过程168.2对本设计特点和不足的评价168.3收获与体会179参考文献(按公开发表的规范书写)1717/17武汉理工大学《编译原理》课程设计说明书FOR循环语句的翻译程序设计(递归下降法、输出四元式)1系统描述(问题域描述)1.1目的通过设计、编

3、辑、调试和运行一个对for循环语句进行词法分析、语法及语义分析的编译程序,并通过对实验用例的测试来更加深刻的理解语言编译的过程和原理。从而达到在理论学习的基础上,对本课程有一个更深的掌握。1.2设计步骤对循环语句:for〈表达式;循环条件;表达式〉赋值语句(赋值语句中可以嵌套更多的for循环语句)(1)设计符合自身语法分析方法要求的文法和属性文法。(2)设计对for循环语句进行词法分析的函数,输出单词序列。(3)设计递归下降法对文法进行语法分析。(4)对源文件进行语法分析同时对源文件进行语义处理。

4、(5)设计中间代码格式并输出四地址中间代码到文件中保存。(6)对源文件中的错误进行输出。1.3系统体系结构描述源文件词法分析语法分析中间代码文件管理本系统包括两大部分:词法分析和语法分析;系统中还包含了一个文件管理的连接件,实现对词法分析结果和中间代码的输出保存功能。17/17武汉理工大学《编译原理》课程设计说明书2文法及属性文法的描述2.1文法文法是用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语言应有利于句子分析和

5、翻译,而且,最好能通过这些规则自动产生有效的语法分析程序。for循环语句的文法如下所示:1)S->for(W)Sx2)W->A;W13)W1->B;W24)W2->A5)Sx->Ax6)Sx->{Am}7)Am->AmAx8)Am->Ax2.2属性文法递归下降法的属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的“值”(与文法符号相关的属性)。在一个属性文法中,对应于每个产生式A→a都有一套与之相关联的语义规则,每规则的形式为:b:=f(c1,c2,…,ck)。

6、其中f是一个函数,b和c1,c2,…,ck是该产生式的文法符号的属性。并有如下规则:(1)如果b是A的一个属性,c1,c2…,ck是产生式右边文法符号的属性或A的其他属性,则称b是A的综合属性。(2)如果b是产生式右部某文法符号X的一个属性,并且c1,c2…,ck是A或产生式右边任何文法符号的属性,则称b是文法符号X的继承属性。for循环语句的属性文法为:产生式属性文法S->for(W)Sxemit(1);//生成最后一个jumpbackpatch(nextstat,LastGotoAddress

7、);//回填最后jump;backpatch(W.FalseOrEnd,nextstat);//B为假跳到最后一个语句W1->B;W2backpatch(B.TrueOrChain,W2.TrueOrChain);backpatch(W2.FalseOrEnd,B.codeBegin);17/17武汉理工大学《编译原理》课程设计说明书W2->Aemit(4);//输出跳转W2.TrueOrChain=nextstat;W2.FalseOrEnd=nextstat-1;Sx->{Am}去掉{}B->

8、B1

9、

10、Lbackpatch(B1.FalseOrEnd,L.codeBegin);//回填B.codeBegin=B1.codeBegin;B.TrueOrChain=chainMerge(B1.TrueOrChain,L.TrueOrChain);B.FalseOrEnd=L.FalseOrEnd;LastGotoAddress=nextstat;//记录最后jump回填地址B->LLastGotoAddress=nextstat;//记录最后jump回填地址L->L1&&Mb

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

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

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