python – 解析器YACC中的EOF错误
作者:互联网
我试图使用PLY库中为Python提供的yacc解析器来解析字符串.
解析器本身很长,但我遇到的问题是它总是给我同样的错误,无论我放什么样的字符串.
错误是这样的:
yacc:输入中的解析错误. EOF
而词法分析器运行完美,所以我认为解析器就是问题所在.但我不明白这个错误,所以我甚至不知道在哪里首先解决这个问题
有任何想法吗?
非常感谢你!
解决方法:
PLY中指定的所有解析器都应该具有单个顶级规则,该规则会因解析整个输入文本而减少.例如,如果解析程序,顶级规则可能是这样的:
def p_program(p):
'''
program : declarations
'''
def p_declarations(p):
'''
declarations : declarations declaration
| declaration
'''
...
如果在解析器中出现“EOF”错误,则表示它在不降低顶级语法规则的情况下到达输入的末尾.也就是说,解析堆栈是非空的,并且没有更多可以减少的规则.由于堆栈非空,解析器将尝试移位更多符号并因EOF而失败.
导致此错误的一个可能原因是您的语法中有一个未正确指定的起始规则.确保文件中的第一个p_rule(p)函数是启动规则.
标签:python,parsing,yacc,ply 来源: https://codeday.me/bug/20190621/1252302.html