FOR循环语句的翻译程序设计.docx
《FOR循环语句的翻译程序设计.docx》由会员分享,可在线阅读,更多相关《FOR循环语句的翻译程序设计.docx(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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数据结构96 详细的算法描述(流程图或伪代码)106.1词法分析106.2语法分析117 软
2、件的测试方法和测试结果127.1软件测试方法127.2测试结果127.2.1简单for循环语句(无嵌套)127.2.2 for循环嵌套语句148 研制报告168.1研制过程168.2对本设计特点和不足的评价168.3收获与体会179 参考文献(按公开发表的规范书写)17FOR循环语句的翻译程序设计(递归下降法、输出四元式)1 系统描述(问题域描述)1.1目的通过设计、编辑、调试和运行一个 对for 循环语句进行词法分析、语法及语义分析的编译程序,并通过对实验用例的测试来更加深刻的理解语言编译的过程和原理。从而达到在理论学习的基础上,对本课程有一个更深的掌握。1.2设计步骤对循环语句:for表达
3、式;循环条件;表达式赋值语句(赋值语句中可以嵌套更多的for循环语句)(1) 设计符合自身语法分析方法要求的文法和属性文法。 (2) 设计对for循环语句进行词法分析的函数,输出单词序列。(3) 设计递归下降法对文法进行语法分析。(4) 对源文件进行语法分析同时对源文件进行语义处理。(5) 设计中间代码格式并输出四地址中间代码到文件中保存。 (6) 对源文件中的错误进行输出。1.3系统体系结构描述源文件词法分析语法分析中间代码文件管理 本系统包括两大部分:词法分析和语法分析;系统中还包含了一个文件管理的连接件,实现对词法分析结果和中间代码的输出保存功能。2 文法及属性文法的描述2.1文法文法是
4、用于描述语言的语法结构的形式规则(即语法规则)。这些规则必须是准确的、易于理解的以及有相当强的描述能力。由这种规则所产生的程序语言应有利于句子分析和翻译,而且,最好能通过这些规则自动产生有效的语法分析程序。for 循环语句的文法如下所示:1)S-for(W)Sx 2)W-A;W13)W1-B;W2 4)W2-A5)Sx-Ax 6)Sx-Am7)Am-AmAx 8)Am-Ax2.2属性文法递归下降法的属性文法是在上下文无关文法的基础上,为每个文法符号(终结符或者非终结符)配备若干相关的“值”(与文法符号相关的属性)。 在一个属性文法中,对应于每个产生式 Aa 都有一套与之相关联的语义规则,每规则
5、的形式为:b:=f(c1,c2,ck)。其中 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);/回填最后jump;backpatch(W.Fals
6、eOrEnd ,nextstat);/B为假跳到最后一个语句W1-B;W2backpatch(B.TrueOrChain , W2.TrueOrChain ); backpatch(W2.FalseOrEnd , B.codeBegin );W2-Aemit(4);/输出跳转W2.TrueOrChain = nextstat;W2.FalseOrEnd = nextstat-1;Sx-Am去掉B-B1|Lbackpatch(B1.FalseOrEnd, L.codeBegin );/回填B.codeBegin =B1.codeBegin ;B.TrueOrChain=chainMerge(B1
7、.TrueOrChain, L.TrueOrChain);B.FalseOrEnd = L.FalseOrEnd ;LastGotoAddress=nextstat;/记录最后jump回填地址B-LLastGotoAddress=nextstat;/记录最后jump回填地址L-L1&Mbackpatch(L1.TrueOrChain , M.codeBegin );/回填L.codeBegin =L1.codeBegin ;L.TrueOrChain =M.TrueOrChain ;L.FalseOrEnd = chainMerge(L1.FalseOrEnd , M.FalseOrEnd )
8、;M-!M1M.TrueOrChain =M1.FalseOrEnd;M. FalseOrEnd =M1。TrueOrChainM.codeBegin =M1.codeBegin ;K-idScidK.TrueOrChain =nextstat;K.codeBegin =nextstat;K.FalseOrEnd = nextstat+1;emit(J+Sc,id,id, );/输出跳转语句emit(jump,-,-, );A-id=Eemit(E,- ,- ,id);/输出赋值语句E-EoperT(oper为+-*/)emit(oper , E , T , temp);/输出表达式3 语法分
9、析方法描述及语法分析表设计3.1语法分析方法递归下降分析方法是一种自顶向下语法分析方法,其目的是从文法的开始符号开始,根据输入字符串进行最左推导,试图推导出给定的字符串。或者说,从根节点(文法开始符号)开始,自上而下,从左到右地为输入字符串建立一棵语法树,并以预先确定的顺序创建语法树的节点。递归下降分析法可能需要回溯,即需要重复地扫描输入。递归子程序法的实现思想是对应每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时,能够按照LL(1)形式唯一地确定选择某个候选式进行推导,因此首先要消除左递归。由于递归下降法对每个过程可能存在直接或间接的
10、递归调用,所以对某个过程在退出之前可能又要被调用,因此有些信息需要保留,通常在入口时需保留某些信息,出口时需恢复。由于递归过程是遵循先进后出规律,通常开辟栈来处理。递归调用的语法调用关系图如下图所示:递归调用的语法调用关系图3.2语法分析表设计在对for循环语句进行翻译时,涉及到对赋值表达式和布尔表达式语句的翻译。在文法的描述中给出了算术运算符、关系运算符和逻辑运算符之间的优先级关系,其结合性由下表所示:优先级操作符类型操作对象的个数结合性1()逻辑运算符左右2!逻辑非运算符单目运算符右左3*,/算术运算符双目运算符左右4+,-算术运算符双目运算符左右5,=关系运算符双目运算符左右6=,!=关
11、系运算符双目运算符左右7&逻辑与运算符双目运算符左右8|逻辑或运算符双目运算符左右9=赋值运算符双目运算符右左4中间代码形式的描述及中间代码序列的结构设计4.1中间代码形式描述常见的中间代码形式有逆波兰记号,三元式,四元式和树形表示。本课程设计输出的中间代码的表示方法是四元式。四元式是一种更接近目标代码的中间代码形式。由于这种形式的中间代码便于优化处理,因此,在目前许多编译程序中得到了广泛的应用。 四元式实际上是一种“三地址语句”的等价表示。它的一般形式为: (op,arg1,arg2,result) 其中,op为一个二元 (也可是一元或零元)运算符;arg1,arg2分别为它的两个运算 (或
12、操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算的结果将放入result中。需要指出的是,每个四元式只能有一个运算符,所以,一个复杂的表达式须由多个四元式构成的序列来表示。例如,表达式A+B*C可写为序列 T1=B*C T2=A+T1 其中,T1,T2是编译系统所产生的临时变量名。当op为一元、零元运算符 (如无条件转移)时,arg2甚至arg1应缺省,即result=op arg1或 op result ;对应的一般形式为: (op,arg1,result) 或 (op,result) 4.2中间代码序列的结构设计对于循环语句:for(语句1;语句2;语句3)表达式,的中间代码序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FOR 循环 语句 翻译 程序设计
限制150内