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