資源簡(jiǎn)介
LR文法分析表構(gòu)造器
在main.py中配置對(duì)應(yīng)的文法、終結(jié)符、非終結(jié)符、開(kāi)始項(xiàng)目、開(kāi)始符號(hào)即可自動(dòng)生成項(xiàng)目集、GO關(guān)系、LR0分析表。 當(dāng)生成LR0分析表產(chǎn)生沖突時(shí),會(huì)自動(dòng)構(gòu)造FIRST集和FOLLOW集,轉(zhuǎn)為生成SLR1分析表。
用法
python3 main.py 最后的表格如果需要輸出到EXCEL中,建議稍作更改輸出為CSV文件,再由EXCEL處理。
示例
對(duì)文法G[E]構(gòu)造分析表
E→E+T | E-T | T
T→T*F | T/F | F
F→P^F | P
P→(E) | i*
應(yīng)先構(gòu)造其拓廣文法G[E'],但此程序暫不支持兩個(gè)字符的非終結(jié)符,因此用G[A]代替。 構(gòu)造如
代碼片段和文件信息
#?程序使用Python3運(yùn)行
#?示例文法G[E]:
#?E→E+T?|?E-T?|?T
#?T→T*F?|?T/F?|?F
#?F→P^F?|?P
#?P→(E)?|?i
#?用前需配置全局變量如下
#?拓廣文法G[A],必須寫(xiě)開(kāi),不能帶或
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‘]
#?非終結(jié)符,必須是一個(gè)字符不能寫(xiě)成類似E‘,不然轉(zhuǎn)向SLR時(shí)會(huì)出錯(cuò)
Vn?=?[‘A‘?‘E‘?‘T‘?‘F‘?‘P‘]
#?終結(jié)符,必須是一個(gè)字符,空字符寫(xiě)成ε
Vt?=?[‘+‘?‘-‘?‘*‘?‘/‘?‘^‘?‘(‘?‘)‘?‘i‘?‘#‘]
#?項(xiàng)目集的構(gòu)造由此項(xiàng)目開(kāi)始
begin?=?‘A→·E‘
#?開(kāi)始字符,如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
評(píng)論
共有 條評(píng)論