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