1

我有一个使用GNU bisonand的简单解析器实现flex。它工作正常,我可以从命令行解析多个文件

./program file1.m file2.m 

我以相反的顺序加载文件(这并不重要)。

但是问题是我得到的行号(假设 中存在语法错误file1.m)将是中file1的行数加上中的行数file2

所以野牛不会在每个文件之后重置行号。怎样才能做到这一点?我用谷歌搜索了一下,发现了yy_flush_buffer,但我不确定如何使用它,或者它是否真的是我需要的。

有谁知道如何做到这一点?先感谢您。

4

1 回答 1

3

行号由flex变量中生成的代码维护yylineno。这些行号是以一种或另一种方式传递给从bison. 可能有其他方法可以重置行号,但老派方法是在调用新文件之前将变量设置yylineno为。您将不得不使用let将行号保持在轻微的性能损失,但您可能已经这样做了。1yyparse%option yylinenoflex

于 2013-04-21T11:14:18.380 回答