C 我很困惑
输入到lexerC 我很困惑,c,flex-lexer,C,Flex Lexer,输入到lexer abc gef4 44jdjd ghghg x ererete xyzzz 55k hello wold 33 我的规则 rule1 [0-9]+[a-zA-Z]+ rule2 [x-z] rule3 .* {rule1}{ printf(“%s\n”,yytext); } {rule2}{ printf(“%s\n”,yytext); } {rule3}{ //什么也不印 } 输出:- x 55k 我无法理解输出?有人能帮我一下吗。输入的第一个字符与规则
abc gef4 44jdjd ghghg
x
ererete
xyzzz
55k
hello wold
33
我的规则
rule1 [0-9]+[a-zA-Z]+
rule2 [x-z]
rule3 .*
{rule1}{
printf(“%s\n”,yytext);
}
{rule2}{
printf(“%s\n”,yytext);
}
{rule3}{
//什么也不印
}
输出:-
x
55k
我无法理解输出?有人能帮我一下吗。输入的第一个字符与规则1和规则2不匹配。相反,规则3将输入一直吃到行的末尾。第3、4、6和7行也是如此。您可能需要一个不那么贪婪的规则3,即不占用空格的规则:
[^ \t\n]* /* Do nothing */
然后规则1会找到44jdjd。很多字符串都与规则3匹配,这是为什么?为什么规则3与单词44jdjd匹配?它应该与规则1匹配,因为规则1首先出现?它现在也打印不需要的单词。我想我必须写一个正则表达式来吃这些。如何将两个正则表达式放在一个规则上?这不起作用规则3[^\t\n]|[a-z-z]*