我正在尝试使用PLY库中为Python提供的yacc解析器来解析字符串。 解析器本身很长,但我遇到的问题是它总是给我同样的错误,无论我放什么样的字符串。 错误是这样的:
yacc:输入中的解析错误。 EOF
lexer运行得很好,所以我认为解析器就是问题所在。但我不明白这个错误,所以我甚至不知道在哪里首先要解决这个问题
有什么想法吗? 非常感谢你!
答案 0 :(得分:6)
PLY中指定的所有解析器都应该有一个顶级规则,该规则会因解析整个输入文本而减少。例如,如果解析程序,顶级规则可能是这样的:
def p_program(p):
'''
program : declarations
'''
def p_declarations(p):
'''
declarations : declarations declaration
| declaration
'''
...
如果在解析器中出现“EOF”错误,则表示它在不降低顶级语法规则的情况下到达输入的末尾。也就是说,解析堆栈是非空的,并且没有更多可以减少的规则。由于堆栈非空,解析器将尝试移动更多符号并因EOF而失败。
此错误的一个潜在原因是您的语法中有一个未正确指定的起始规则。确保文件中的第一个p_rule(p)函数是启动规则。