题 目: 布尔表达式的翻译程序
针对布尔表达式的文法:
利用递归下降分析法编制、调试其语法及语义分析程序,生成的中间代码为逆波兰式。编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
设计原则
1.属性文法
属性文法是在上下文无关文法的基础上,允许每个文法符号x(终结符或非终结符)根据处理的需要,定义与x相关联的属性。如x的类型x.type,x的值x.val,x的存储位置x.place等。对属性的处理有计算、传递信息等,属性处理的过程也就是语义处理过程。当然,处理时必须遵循一定的规则。为此,为每个文法规则式定义一组属性的计算规则,称为语义规则。
下面给出属性文法的形式定义:
一个属性文法形式上定义为一个三元组AG,AG=(G,V,E)。其中G表示一个上下文无关文法;V表示属性的有穷集;E表示属性的断言或谓词的有穷集。
2.递归下降分析法
递归子程序法是比较简单直观易于构造的一种语法分析方法。
实现思想:文法中每个非终结符对应一个递归过程(子程序),每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时能够按LL(1)形式可唯一地确定选择某个候选式进行推导。
3.逆波兰表达式
逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。逆波兰表达式又叫做后缀表达式。
逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)*(c+d)转换为ab+cd+*。
它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。 其运算方式如下:
如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。
在Windows7 下利用VS2005开发,开发语言为C++。
课程设计和完整代码下载地址:课设