2011-11-22 48 views
4

我想解析一個字符串,使用Python的PLY庫中提供的yacc解析器。 解析器本身非常長,但是我遇到的問題是,無論我放置什麼樣的字符串,它總是會給我同樣的錯誤。 錯誤是這樣的:解析器中的EOF錯誤YACC

yacc:解析輸入錯誤。 EOF

而且詞法分析器運行完美,所以我認爲解析器是問題所在。但我不明白這個錯誤,所以我甚至不知道在哪裏看第一個解決這個問題

任何想法? 非常感謝!

+0

解析器如何獲取其下一個標記?如果你用「手工」來稱呼它,那麼這種機制是否有效? – sarnold

+0

我怎樣才能用手調用它? – camelCase

+0

從'python'交互式REPL,'import'中導入任何你需要導入的軟件包,然後調用'yy_scan_string(「輸入字符串」)'(或者你的Python版本中調用的任何東西)。 – sarnold

回答

5

在PLY中指定的所有解析器預計會有一個頂級規則,由於解析整個輸入文本而減少。例如,如果解析程序,頂層規則可能是這樣的:

def p_program(p): 
    ''' 
    program : declarations 
    ''' 

def p_declarations(p): 
    ''' 
    declarations : declarations declaration 
       | declaration 
    ''' 
... 

如果你在解析器「EOF」的錯誤,這意味着它達到了輸入的末尾,而不會降低頂級語法規則。也就是說,解析堆棧是非空的,沒有更多的規則可以減少。由於堆棧非空,解析器將嘗試移動更多符號並由於EOF而失敗。

此錯誤的一個潛在原因是在語法中有一個不正確的指定啓動規則。確保文件中的第一個p_rule(p)函數是起始規則。