C 我很困惑

C 我很困惑,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 我无法理解输出?有人能帮我一下吗。输入的第一个字符与规则

输入到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   

我无法理解输出?有人能帮我一下吗。

输入的第一个字符与规则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]*