这是我的lex代码:
%{
%}
%%
[ \t]* {printf("tab");}
.+ {
printf("%s", yytext);}
.|\n {
ECHO;
}
%%
int main() {
yylex();
return 0;
}
这是我的输入数据:
#include<stdio.h>
int main(){
for(int i = 0 ; i < 10 ; i ++){
for(int j = 0 ; j < i ; j ++){
printf("*");
}
printf("\n");
}
}
在我看来,。+规则会在遇到'\ n'时停止。
但是我不能在输入行5处触发[\ t]规则。
答案 0 :(得分:0)
生成的词法分析器将始终选择最长的令牌。为了你的
printf("*");
规则.+
会提供比[ \t]*
更长的令牌,因此会选择前者。
顺便说一下,你可以试试这个例子:
%{
%}
%%
[ \t]* {printf("| |");}
\n {printf("newline\n");}
[^ \n]+ {printf("%s", yytext);}
%%
int main() {
yylex();
return 0;
}