資源簡介
LR文法分析表構造器
在main.py中配置對應的文法、終結符、非終結符、開始項目、開始符號即可自動生成項目集、GO關系、LR0分析表。 當生成LR0分析表產(chǎn)生沖突時,會自動構造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
評論
共有 條評論