为什么在main()中只调用一次yylex()

时间:2018-03-27 12:03:24

标签: flex-lexer yacc lex

当我为yacc解析器编写yylex()时,yylex()通常一次返回符号,也就是说,yylex()必须多次调用,直到文件结束。

但是当我为lex扫描器编写一个main函数时,我只调用yylex()一次,但整个文件仍然被完全扫描。

void main(int argc, char* argv[]) {
    printf("start\n");
    yyin = fopen(argv[1], "r");
    yylex();
    printf("word count: %d\n", wordCount);
    fclose(yyin);
}

为什么?

1 个答案:

答案 0 :(得分:0)

很抱歉提出一个愚蠢的问题,我已经阅读了lex生成的c文件,并发现操作代码粘贴在一个switch case段中,因此,正如@rici所说,这很大程度上取决于你写的内容在操作中,由于我的代码在运行中没有返回,因此对yylex的一个调用将通过流。如果有回复,我应该使用while()来调用yylex。