Python YACC EOF立即达成

时间:2015-05-10 20:35:02

标签: python yacc

晚上好,

我正在学习使用Ply(Python 3 / Win 8.1系统)学习lex / yacc,但我遇到了障碍:我似乎无法让yacc读取输入文件正确。

如果我硬编码输入文件的内容,我会得到预期的结果,但是如果我尝试从中读取,yacc只是从状态0到达文件的末尾,在它之前停止语法分析'真的开始了。

这是我的主要内容(令牌和句法规则在上面定义 - 它们似乎不是问题,因为当输入被硬编码时程序运行正常):

if __name__ == "__main__":
import sys
lexer = lex.lex()
yacc.yacc()
inputfile = open(sys.argv[1], 'r', encoding="UTF-8")
lexer.input(inputfile.read())
for token in lexer: #for this part, the file is read correctly
    print("line %d : %s (%s) " % (token.lineno, token.type, token.value))

result = yacc.parse(inputfile.read(), debug=True)
print(result) #Stack immediately contains . $end and the p_error(p) I've defined confirms EOF was reached
tmp = "{{var1 := 'some text' ; var2 := 'some other text' ; var3 := ( 'text', 'text2') ; }}" #Same contents as the input file
result = yacc.parse(tmp, debug=True)
print(result) #correct results

1 个答案:

答案 0 :(得分:2)

使用" as as"也可能是一个好主意,它更容易阅读(imo)并且更加强大':

{{1}}

请参阅:https://www.python.org/dev/peps/pep-0343/