连续两次使用yylex()

时间:2011-12-04 22:53:57

标签: c parsing lex flex-lexer lexical-analysis

所以我的问题非常简单,我想它之前已经得到了解答但是我无法得到一个关于它的好主题:我可以解析一次文件,收集一些所需信息来初始化我的结构然后解析它是第二次“真实”吗?

当我拨打yylex()两次时,它似乎什么也没做。还是我需要重置我的文件的读指针?我是C菜鸟所以这可能是一个愚蠢的问题!无论如何,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

所以,如果它引起了某些人的兴趣:

我尝试使用rewind,这是#include <stdio.h>提供的功能。虽然,在写了类似的东西之后:

yylex();
rewind(yyin);
yylex();

结果我的行为仍然不好。以下是我完全解决问题的方法:
在我的词法分析器中,我补充道:

<<EOF>>    yyterminate();

在此修改和上面详述的代码之后,生成的代码按预期运行。

我希望这会有所帮助!

答案 1 :(得分:1)

是的,你已经到了文件的末尾。您需要重新初始化您的读指针。但是,请查看this link以了解可能更好的解决方案。

答案 2 :(得分:1)

使用yyrestart(FILE *in)

但请注意,flex manual表示不是像这样的两遍扫描程序,而是第一次构建解析树。