admin 管理员组文章数量: 1087135
2024年4月27日发(作者:php技术招聘要求)
武汉理工大学《编译原理》课程设计说明书
赋值语句的递归下降翻译程序设计
1 引言
递归下降法是语法分析中最易懂的一种方法。它的主要原理是,对每个非终极符按其
产生式结构构造相应语法分析子程序,其中终极符产生匹配命令,而非终极符则产生过程
调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归
下降法。其中子程序的结构与产生式结构几乎是一致的。
本文将采用这种方法对赋值语句进行翻译,并得到逆波兰式的中间代码结果。另外我
还完成了对逆波兰式的中间代码翻译执行的程序。
1.1 逆波兰式简介
在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种
表示法也称为中缀表示。对中缀表达式的计值,并非按运算符出现的自然顺序来执行其中
的各个运算,而是根据算符间的优先关系来确定运算的次序,此外,还应顾及括号规则。
因此,要从中缀表达式直接产生目标代码一般比较麻烦。
波兰逻辑学家ewicz于1929年提出了另一种表示表达式的方法。按此方法,
每一运算符都置于其运算对象之后,故称为后缀表示。这种表示法的一个特点是,表达式
中各个运算是按运算符出现的顺序进行的,故无须使用括号来指示运算顺序,因而又称为
无括号式。下面我们对照地给出一些表达式的两种表示:
中缀表示后缀表示
A+BAB+
A+B*CABC*+
(A+B)*(C+D)AB+CD+*
x/y^z-d*exyz^/de*-
(a=0∧b>3)∨(e∧x<>y)a0=b3>∧exy<>∧∨
从上面的例子可以看出:
(1) 在两种表示中,运算对象出现的顺序相同;
1
(1)
(2)
(3)
(4)
(5)
武汉理工大学《编译原理》课程设计说明书
(2) 在后缀表示中,运算符按实际计算顺序从左到右排列,且每一运算符总是跟在其
运算对象之后。
顺便提及,Lukasiewicz原来提出的是前缀表示,即把每一运算符置于其运算对象之
前。例如,中缀式a+b和(a+b)/c相应的前缀表示分别为+ab和/+abc。因此,为了区分前
缀和后缀表示,通常将后缀表示称为逆波兰表示。因前缀表示并不常用,所以有时也将后
缀表示就称为波兰表示。
2 需求分析
本课程设计的目的是为了实现赋值语句的递归下降翻译程序设计,并给出对应的逆波
兰式中间代码。
〈赋值语句〉::= 〈标识符〉 := 〈算术表达式〉
算术表达式的文法:
〈算术表达式〉∷=〈项〉{〈加法运算符〉〈项〉}
〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉}
〈因子〉∷= 〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’
〈加法运算符〉∷= +|-
〈乘法运算符〉∷= *|/
设计赋值语句文法,给出该文法的属性文法,用递归下降分析法实现对赋值语句的翻
译,给出翻译的逆波兰式结果。
3 总体设计
本文采用用递归下降分析法实现对赋值语句的翻译,并给出翻译的逆波兰式结果。
3.1 设计原则
设计赋值语句文法,给出该文法的属性文法,用递归下降分析法实现对赋值语句的翻
译,给出翻译的逆波兰式结果。
按照递归下降分析技术,递归下降识别程序是由一组子程序组成,每个子程序对应于
一个非终结符号。该子程序处理相应句型中相对于此非终结符号的产生式。
2
版权声明:本文标题:赋值语句的递归下降翻译程序设计2 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1714183303a668711.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论