Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想解析两个文件。我有生成解析器的 Yacc/lex 代码。
当我解析第一个文件(a.txt)时它工作正常,但是当我解析第二个文件(b.txt)时它返回错误(语法错误),但是当我首先解析第二个文件(b.txt)时它可以解析它顺利。
我的猜测是,在开始读取第二个文件时读取第一个文件后,某些缓冲区或状态不会被清除。所以我想知道在继续解析第二个文件之前我是否必须重置解析器维护的一些缓冲区或状态。
我无法在此处粘贴我的代码,因为它太大了。
提前致谢。
实际上,我通过其他一些问题找到了答案。问题在于清除缓冲区,所以如果你添加一个
YY_FLUSH_BUFFER
在打开新文件之前,它可以解决问题。
你想要一个可重入解析器。Bison 至少支持这一点,我不确定 yacc 是否会这样做,但切换到 bison 应该是无痛的。
添加%pure-parser你的语法文件。
%pure-parser
http://www.delorie.com/gnu/docs/bison/bison_66.html