1.设计目的及设计要求
设计内容及要求:对任一给定的算符优先文法 G,构造其优先表。要求: 首先实现对于非终结符 P 的 FIRSTVT(P)构造算法和 LASTVT(P)构造算法,再实现 教材 P.92 给出的优先表构造算法。以教材 P.90 例 5.4 文法为例,程序生成表 5.1
文法5.4
E->E+T|T
T->T*F|F
F->P↑F|P
P->(E)|i
2.设计内容、主要算法描述
优先表构建程序:
- 将所给的文法进行分析,将string进行分解
- 通过使用firstvt构建算法,多次循环构建firstvt集合
- 通过使用lastvt构建算法,多次循环构建lastvt集合
- 通过firstvt和lastvt集合,在寻找不同的位置,根据优先表构建算法,将各个优先关系填入表格得到所需的算法。
a的优先级低于b
a < b: 文法中有形如A→…aB…的产生式而B+b…或B+Cb…
a的优先级等于b
a = b: 文法中有形如A→…ab…或者A→…aBb…的产生式
a的优先级高于b
a > b: 文法中有形如A…Bb…的产生式,而B+…a或B+…aC
算符的优先关系是有序的
如果a > b,不能推出b < a
如果a > b,有可能b > a
如果a > b, b > c,不一定a > c
FIRSTVT集合构建
a) 若有产生式 P→a••• 或 p→Qa•••
则 a∈FIRSTVT(P)
b) 若有产生式 P→Q••• ,
若 a∈FIRSTVT(Q)
则 a∈FIRSTVT(P)
LASTVT集合构建
a) 若有产生式 P→•••a 或 p→•••aQ
则 a∈LASTVT(P)
b) 若有产生式 P→•••Q ,
若 a∈LASTVT(Q)
则 a∈LASTVT(P)