通过 yyparse 解析第二个文件时要遵循的步骤



我想解析两个文件。我有生成解析器的 Yacc/lex 代码。

当我解析第一个文件 (a.txt) 时它工作正常,但是当我解析第二个文件 (b

.txt) 时,它会返回错误(语法错误),但是当我解析第二个文件 (b.txt) 时,它可以顺利解析它。

我的猜测是,在读取第一个文件后,当它开始读取第二个文件时,一些缓冲区或状态没有被清除。所以我想问一下,在继续解析第二个文件之前,我是否必须重置解析器维护的一些缓冲区或状态。

我无法将我的代码粘贴到这里,因为它太大了。

提前谢谢。

你需要一个可重入解析器。野牛至少支持这一点,我不太确定 yacc 是否这样做,但切换到野牛应该有效地无痛。

在语法文件中添加%pure-parser

http://www.delorie.com/gnu/docs/bison/bison_66.html

实际上,我通过其他一些问题找到了答案。问题在于清除缓冲区,因此如果您添加

YY_FLUSH_BUFFER

对于打开一个新文件,它解决了问题。

最新更新