欢迎来到天天文库
浏览记录
ID:18748729
大小:579.00 KB
页数:18页
时间:2018-09-21
《赋值语句的递归下降翻译程序设计2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、武汉理工大学《编译原理》课程设计说明书赋值语句的递归下降翻译程序设计1引言递归下降法是语法分析中最易懂的一种方法。它的主要原理是,对每个非终极符按其产生式结构构造相应语法分析子程序,其中终极符产生匹配命令,而非终极符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归下降法。其中子程序的结构与产生式结构几乎是一致的。本文将采用这种方法对赋值语句进行翻译,并得到逆波兰式的中间代码结果。另外我还完成了对逆波兰式的中间代码翻译执行的程序。1.1逆波兰式简介在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。
2、对中缀表达式的计值,并非按运算符出现的自然顺序来执行其中的各个运算,而是根据算符间的优先关系来确定运算的次序,此外,还应顾及括号规则。因此,要从中缀表达式直接产生目标代码一般比较麻烦。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。这种表示法的一个特点是,表达式中各个运算是按运算符出现的顺序进行的,故无须使用括号来指示运算顺序,因而又称为无括号式。下面我们对照地给出一些表达式的两种表示:中缀表示后缀表示A+BAB+(1)A+B*CABC*+(2)(A+B)*(C+D)AB+CD+*(3)x/
3、y^z-d*exyz^/de*-(4)(a=0∧b>3)∨(e∧x<>y)a0=b3>∧exy<>∧∨(5)从上面的例子可以看出:(1)在两种表示中,运算对象出现的顺序相同;18武汉理工大学《编译原理》课程设计说明书(2)在后缀表示中,运算符按实际计算顺序从左到右排列,且每一运算符总是跟在其运算对象之后。顺便提及,Lukasiewicz原来提出的是前缀表示,即把每一运算符置于其运算对象之前。例如,中缀式a+b和(a+b)/c相应的前缀表示分别为+ab和/+abc。因此,为了区分前缀和后缀表示,通常将后缀表示称为逆波兰表示。因前缀表示并不常用,所以有时也将后缀表示就称为波兰表示。1
4、需求分析本课程设计的目的是为了实现赋值语句的递归下降翻译程序设计,并给出对应的逆波兰式中间代码。〈赋值语句〉::=〈标识符〉:=〈算术表达式〉算术表达式的文法:〈算术表达式〉∷=〈项〉{〈加法运算符〉〈项〉}〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉}〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’〈加法运算符〉∷=+|-〈乘法运算符〉∷=*|/设计赋值语句文法,给出该文法的属性文法,用递归下降分析法实现对赋值语句的翻译,给出翻译的逆波兰式结果。2总体设计本文采用用递归下降分析法实现对赋值语句的翻译,并给出翻译的逆波兰式结果。2.1设计原则设计赋值语句文法,给出该文
5、法的属性文法,用递归下降分析法实现对赋值语句的翻译,给出翻译的逆波兰式结果。按照递归下降分析技术,递归下降识别程序是由一组子程序组成,每个子程序对应于一个非终结符号。该子程序处理相应句型中相对于此非终结符号的产生式。18武汉理工大学《编译原理》课程设计说明书1.1.1文法〈赋值语句〉::=〈标识符〉:=〈算术表达式〉算术表达式的文法:〈算术表达式〉∷=〈项〉{〈加法运算符〉〈项〉}〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉}〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’〈加法运算符〉∷=+|-〈乘法运算符〉∷=*|/1.1.2属性文法的设计下面,我们按照以上文法,
6、说明如何按语法制导翻译方法将简单算术表达式翻译成为后缀式。为了突出翻译的重点,这里不过多地涉及某些语义处理细节,属性文法中只给出了语义规则。产生式属性文法〈赋值语句〉::=〈标识符〉:=〈算术表达式〉POST=〈标识符〉&〈算术表达式〉&=〈算术表达式〉∷=〈项〉{〈加法运算符〉〈项〉}POST=〈项〉&{〈项〉&〈加法运算符〉}〈项〉∷=〈因子〉{〈乘法运算符〉〈因子〉}POST=〈因子〉&{〈因子〉&〈乘法运算符〉}〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’POST=〈标识符〉|〈无符号整数〉|〈表达式〉在属性文法中,POST就是我们要得到的逆波兰式。“&
7、”表示各个逆波兰式的连接。1.2数据结构和模块说明1.2.1主函数18武汉理工大学《编译原理》课程设计说明书图1主函数流程图1.1.1语义分析函数本函数的功能是实现对赋值语句的语义分析。最后得到对应的逆波兰式结果。18武汉理工大学《编译原理》课程设计说明书图2语义分析函数流程图1.1.1语句函数本函数实现了对语句的分析,结果返回的也是逆波兰式。18武汉理工大学《编译原理》课程设计说明书图3语句函数1.1.1赋值语句函数赋值语句的产生式如下:〈赋值语句〉::=〈标识符〉:=〈算术表
此文档下载收益归作者所有