我正在使用PLY来解析文件。当我在一行上出错时,我必须向用户打印一条消息。
Error at the line 4
等消息。
def p_error(p):
flag_for_error = 1
print ("Erreur de syntaxe sur la ligne %d" % (p.lineno))
yacc.errok()
但它不起作用。我有错误
print ("Erreur de syntaxe sur la ligne %d" % (p.lineno))
AttributeError: 'NoneType' object has no attribute 'lineno'
还有另一种更合适的方法吗?
答案 0 :(得分:3)
前一段时间我遇到了同样的问题。它是由意外的输入结束引起的。
只测试p
(p_error
中实际上是一个令牌)是None
。
您的代码看起来像这样:
def p_error(token):
if token is not None:
print ("Line %s, illegal token %s" % (token.lineno, token.value))
else:
print('Unexpected end of input')
希望这有帮助。
答案 1 :(得分:1)
我解决了这个问题。 我的问题是我总是重新初始化解析器。
def p_error(p):
global flag_for_error
flag_for_error = 1
if p is not None:
errors_list.append("Erreur de syntaxe à la ligne %s"%(p.lineno))
yacc.errok()
else:
print("Unexpected end of input")
yacc.errok()
好的功能是
def p_error(p):
global flag_for_error
flag_for_error = 1
if p is not None:
errors_list.append("Erreur de syntaxe à la ligne %s"%(p.lineno))
yacc.errok()
else:
print("Unexpected end of input")
当我有预期的输入结束时,我不能继续解析。
谢谢