算符优先分析过程模拟 下载本文

内容发布更新时间 : 2024/5/11 1:41:39星期一 下面是文章的全部内容请认真阅读。

目 录

一、需求分析........................................................................ 1

二、概要设计........................................................................ 2

三、详细设计........................................................................ 5

四、测试结果...................................................................... 10

五、总结 .............................................................................. 12

华东交通大学课程设计报告

一、 需求分析

算符优先分析是自底而上分析方法的一种,这种方法是对输入符号串自左向右进行扫描,并将输入符逐个移入一个后进先出栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄或可规约串时(该句柄或可归约串对应产生式的右部),就用该产生式的左部非终结符代替相应右部的文法符号串,重复这样的归约过程,一直到只剩文法的开始符号时则为分析成功,也就是确认输入串是该文法的句子。

而算符优先分析的基本思想则是只规定算符之间的优先关系,也就

是只考虑终结符之间的优先关系,由于算符优先分析不考虑非终结符之间的优先关系,在归约过程中只要找到可归约的串就归约,并不考虑归约到那个非终结符名。

在定义具体的由于算符优先关系之前,先说明由于算符优先关系符

的定义,有三中由于算符优先关系符,分别是>,<,=

设G是一个不含ε产生式的算符文法,a,b是任意两个终结符,A,

B,C是非终结符,算符优先关系=,<,>定义如下:

(1)a = b 当且仅当G中含有形如A->…ab… 或 A->…aBb…的产生式

(2)a < b 当且仅当G中含有形如A->…aB…的产生式,且B可以多

步推导出b… 或B可以多步推倒出Cb…

(3)a > b 当且仅当G中有型如A->…Bb…的产生式,且B可以多

步推导出…a 或B可以多步推导出…Ac

因为算符优先关系运算的次序只与运算符有关,而与运算对象无关,明显,对于算符优先文法的设计成为了关键。

第 1 页 共 13 页

华东交通大学课程设计报告

二、概要设计 (一)、文法设计

算符优先分析只考虑算符(终结符)之间的优先关系,先设计文法G为:

(1)S -> v = E

(2)E -> E + E (3)E -> E - E (4)E -> E * E (5)E -> E / E (6)E -> ( E ) (7)E -> v (8)E -> i

(二)、算符优先关系设计

通常在算术表达式求值过程中,运算次序是先乘除后加减,这说明了乘除运算先级别高于加减运算的优先级,乘除为同一优先级但运算符在前边的先做,这叫作左结合,同样加减运算也是如此,这也说明了运算的次序只与运算符有关,而与运算对象无关,因而我根据这样的基本原理开始设计运算符之间的优先关系。

(1)*,/的优先级别较高,高于+,-,遵循左结合。相当于*>*, *>/,

/>/, />*。

(2)+,-的优先级别较低,遵循左结合相当于+>+, +>-, ->-, ->+。

(3)对‘(’‘)’规定括号的优先性大于括号外的运算符,小于括号内

的运算符。

(4)对于句子括号‘#’号规定与它相邻的任何运算符号的优先性都比

它高。、

(5)运算对象的终结符i,它优先级别最高。

第 2 页 共 13 页