我使用GNU bison
和flex
进行简单的解析器实现。它工作正常,我可以从命令行解析多个文件
./program file1.m file2.m
我以相反的顺序加载文件(这没关系)。
然而问题是我获得的行号(假设file1.m
中存在语法错误时)将是file1
中的行号加上file2
中的行数。
因此野牛不会在每个文件后重置行号。怎么能实现呢?我用google搜索了yy_flush_buffer
,但我不确定如何使用它,或者它实际上是我需要的。
有谁知道怎么做?提前谢谢。
答案 0 :(得分:1)
行号由变量flex
中yylineno
生成的代码维护。这些行号是从bison
传递给代码的一种或另一种方式。可能还有其他方法可以重置行号,但旧学校方法将变量yylineno
设置为1
,然后在新文件上调用yyparse
。您必须使用%option yylineno
让flex
保持行号略有性能损失,但您可能已经这样做了。