• 大小: 6KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-01-07
  • 语言: Python
  • 标签: 编译原理  SLR1  LR0  

资源简介

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

评论

共有 条评论