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

时间:2012-06-08 08:49:45

标签: parsing yacc lex

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

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

我的猜测是,在读取第一个文件后,当它开始读取第二个文件时,某些缓冲区或状态不会被清除。所以我想要知道在继续解析第二个文件之前,我是否必须重置一些缓冲区或状态解析器。

我无法将代码粘贴到此处,因为它太大了。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您想要一个可重入的解析器。 Bison至少支持这一点,我不确定yacc是否这样做,但切换到野牛应该是无痛的。

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

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

答案 1 :(得分:0)

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

  

YY_FLUSH_BUFFER

Befor打开一个新文件可以解决问题。