Bison重置每个新文件的行号

时间:2013-04-21 09:13:15

标签: parsing bison flex-lexer

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

./program file1.m file2.m 

我以相反的顺序加载文件(这没关系)。

然而问题是我获得的行号(假设file1.m中存在语法错误时)将是file1中的行号加上file2中的行数。

因此野牛不会在每个文件后重置行号。怎么能实现呢?我用google搜索了yy_flush_buffer,但我不确定如何使用它,或者它实际上是我需要的。

有谁知道怎么做?提前谢谢。

1 个答案:

答案 0 :(得分:1)

行号由变量flexyylineno生成的代码维护。这些行号是从bison传递给代码的一种或另一种方式。可能还有其他方法可以重置行号,但旧学校方法将变量yylineno设置为1,然后在新文件上调用yyparse。您必须使用%option yylinenoflex保持行号略有性能损失,但您可能已经这样做了。