弹性输出没有显示正确的行为

flex output not showing correct behavior

我在上编译器设计课程,必须学习 flex 进行词法分析。现在,据我所知,flex 将输入流中的字符与翻译规则相匹配,并相应地给出输出。 所以,下面的代码应该输出一个 "character" 的字符串,等于 "hello world" - 1 的长度。但是它打印的是 "goodbye" 。我在这里理解错了吗?

代码:

%%
[a-zA-Z]          printf("character");
"hello world"     printf("goodbye");
%%

您的词法分析器无法识别空格,因此它使用具有指定字符串的规则。插入这条规则:

[ \t\n\r] printf("%s", yytext);

但是,根据documentation,它会解决最长匹配的歧义,仍然是"goodbye"规则。