我試圖使用PLY庫中為Python提供的yacc解析器來解析字元串.
解析器本身很長,但我遇到的問題是它總是給我同樣的錯誤,無論我放什麼樣的字元串.
錯誤是這樣的:
yacc:輸入中的解析錯誤. EOF
而詞法分析器運作完美,是以我認為解析器就是問題所在.但我不明白這個錯誤,是以我甚至不知道在哪裡首先解決這個問題
有任何想法嗎?
非常感謝你!
解決方法:
PLY中指定的所有解析器都應該具有單個頂級規則,該規則會因解析整個輸入文本而減少.例如,如果解析程式,頂級規則可能是這樣的:
def p_program(p):
'''
program : declarations
'''
def p_declarations(p):
'''
declarations : declarations declaration
| declaration
'''
...
如果在解析器中出現“EOF”錯誤,則表示它在不降低頂級文法規則的情況下到達輸入的末尾.也就是說,解析堆棧是非空的,并且沒有更多可以減少的規則.由于堆棧非空,解析器将嘗試移位更多符号并因EOF而失敗.
導緻此錯誤的一個可能原因是您的文法中有一個未正确指定的起始規則.確定檔案中的第一個p_rule(p)函數是啟動規則.
标簽:python,parsing,yacc,ply
來源: https://codeday.me/bug/20190621/1252302.html