资源简介
LR文法分析表构造器
在main.py中配置对应的文法、终结符、非终结符、开始项目、开始符号即可自动生成项目集、GO关系、LR0分析表。 当生成LR0分析表产生冲突时,会自动构造FIRST集和FOLLOW集,转为生成SLR1分析表。
用法
python3 main.py 最后的表格如果需要输出到EXCEL中,建议稍作更改输出为CSV文件,再由EXCEL处理。
示例
对文法G[E]构造分析表
E→E+T | E-T | T
T→T*F | T/F | F
F→P^F | P
P→(E) | i*
应先构造其拓广文法G[E'],但此程序暂不支持两个字符的非终结符,因此用G[A]代替。 构造如
代码片段和文件信息
# 程序使用Python3运行
# 示例文法G[E]:
# E→E+T | E-T | T
# T→T*F | T/F | F
# F→P^F | P
# P→(E) | i
# 用前需配置全局变量如下
# 拓广文法G[A],必须写开,不能带或
C = [‘A→E‘ ‘E→E+T‘ ‘E→E-T‘ ‘E→T‘ ‘T→T*F‘ ‘T→T/F‘ ‘T→F‘ ‘F→P^F‘ ‘F→P‘ ‘P→(E)‘ ‘P→i‘]
# 非终结符,必须是一个字符不能写成类似E‘,不然转向SLR时会出错
Vn = [‘A‘ ‘E‘ ‘T‘ ‘F‘ ‘P‘]
# 终结符,必须是一个字符,空字符写成ε
Vt = [‘+‘ ‘-‘ ‘*‘ ‘/‘ ‘^‘ ‘(‘ ‘)‘ ‘i‘ ‘#‘]
# 项目集的构造由此项目开始
begin = ‘A→·E‘
# 开始字符,如G[A]中就是A
BEGIN = ‘A‘
def findI(I v):
newI = []
global C
for i in range(len(I)):
index = location(I[i])
if index != -1 and I[i][index] == v:
newI.append(getNextPointI(I[i]))
addNewI(newI C)
return newI
def addNewI(newI C):
if newI == []:
return
oldLen = len(newI)
for i in range(oldLen):
index = location(newI[i])
if index != -1 and isVn(newI[i][index]):
for j in range(len(C
评论
共有 条评论