4
我想解析一個字符串,使用Python的PLY庫中提供的yacc解析器。 解析器本身非常長,但是我遇到的問題是,無論我放置什麼樣的字符串,它總是會給我同樣的錯誤。 錯誤是這樣的:解析器中的EOF錯誤YACC
yacc:解析輸入錯誤。 EOF
而且詞法分析器運行完美,所以我認爲解析器是問題所在。但我不明白這個錯誤,所以我甚至不知道在哪裏看第一個解決這個問題
任何想法? 非常感謝!
我想解析一個字符串,使用Python的PLY庫中提供的yacc解析器。 解析器本身非常長,但是我遇到的問題是,無論我放置什麼樣的字符串,它總是會給我同樣的錯誤。 錯誤是這樣的:解析器中的EOF錯誤YACC
yacc:解析輸入錯誤。 EOF
而且詞法分析器運行完美,所以我認爲解析器是問題所在。但我不明白這個錯誤,所以我甚至不知道在哪裏看第一個解決這個問題
任何想法? 非常感謝!
在PLY中指定的所有解析器預計會有一個頂級規則,由於解析整個輸入文本而減少。例如,如果解析程序,頂層規則可能是這樣的:
def p_program(p):
'''
program : declarations
'''
def p_declarations(p):
'''
declarations : declarations declaration
| declaration
'''
...
如果你在解析器「EOF」的錯誤,這意味着它達到了輸入的末尾,而不會降低頂級語法規則。也就是說,解析堆棧是非空的,沒有更多的規則可以減少。由於堆棧非空,解析器將嘗試移動更多符號並由於EOF而失敗。
此錯誤的一個潛在原因是在語法中有一個不正確的指定啓動規則。確保文件中的第一個p_rule(p)函數是起始規則。
解析器如何獲取其下一個標記?如果你用「手工」來稱呼它,那麼這種機制是否有效? – sarnold
我怎樣才能用手調用它? – camelCase
從'python'交互式REPL,'import'中導入任何你需要導入的軟件包,然後調用'yy_scan_string(「輸入字符串」)'(或者你的Python版本中調用的任何東西)。 – sarnold