【发布时间】:2018-03-29 11:14:20
【问题描述】:
当我为 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);
}
为什么?
【问题讨论】:
-
没有程序和数据,没有人会给出有用的答案。
-
这很大程度上取决于扫描仪定义中的操作是否包含
return命令。操作直接插入yylex。 -
@rici 你说得对,yylex 控制流非常依赖于动作,我阅读了生成的代码,发现它只是将动作代码复制到 switch case 段。
标签: flex-lexer yacc lex