Python 解析程序YACC中的EOF错误

Python 解析程序YACC中的EOF错误,python,parsing,yacc,ply,Python,Parsing,Yacc,Ply,我试图使用Python的PLY库中提供的yacc解析器解析字符串。 解析器本身很长,但我遇到的问题是,无论我输入什么类型的字符串,它总是给我相同的错误。 错误是: yacc:输入中的分析错误。EOF lexer运行得很好,所以我认为解析器是问题所在。但我不理解这个错误,所以我甚至不知道首先从哪里解决这个问题 有什么想法吗? 多谢各位 在PLY中指定的所有解析器都应该有一个顶级规则,该规则在解析整个输入文本时会减少。例如,如果解析程序,顶级规则可能如下所示: def p_program(p):

我试图使用Python的PLY库中提供的yacc解析器解析字符串。 解析器本身很长,但我遇到的问题是,无论我输入什么类型的字符串,它总是给我相同的错误。 错误是:

yacc:输入中的分析错误。EOF

lexer运行得很好,所以我认为解析器是问题所在。但我不理解这个错误,所以我甚至不知道首先从哪里解决这个问题

有什么想法吗?
多谢各位

在PLY中指定的所有解析器都应该有一个顶级规则,该规则在解析整个输入文本时会减少。例如,如果解析程序,顶级规则可能如下所示:

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

def p_declarations(p):
    '''
    declarations : declarations declaration
                 | declaration
    '''
...
如果解析器中出现“EOF”错误,这意味着它到达了输入的末尾,而没有减少顶层语法规则。也就是说,解析堆栈是非空的,并且没有更多可以缩减的规则。由于堆栈是非空的,解析器将尝试移动更多符号,并由于EOF而失败


此错误的一个潜在原因是语法中指定的起始规则不正确。确保文件中的第一个p_规则(p)函数是开始规则

解析器如何获取其下一个标记?如果您将其称为“手动”,该机制是否有效?从
python
interactive REPL中,
import
需要导入的任何包,然后调用
yy\u scan\u string(“输入字符串”)
(或者在您的python版本中调用的任何东西)。