我想解析两个文件。我有Yacc / lex代码生成解析器。
我解析第一个文件(a.txt)时工作正常但是当我解析第二个文件(b.txt)时它返回错误(语法错误),但是当我解析第二个文件(b.txt)时它可以顺利解析。
我的猜测是,在读取第一个文件后,当它开始读取第二个文件时,某些缓冲区或状态不会被清除。所以我想要知道在继续解析第二个文件之前,我是否必须重置一些缓冲区或状态解析器。
我无法将代码粘贴到此处,因为它太大了。
提前致谢。
答案 0 :(得分:0)
您想要一个可重入的解析器。 Bison至少支持这一点,我不确定yacc是否这样做,但切换到野牛应该是无痛的。
在语法文件中添加%pure-parser
。
答案 1 :(得分:0)
实际上我通过其他一些问题找到了答案。问题在于清除缓冲区,所以如果你添加一个
YY_FLUSH_BUFFER
Befor打开一个新文件可以解决问题。