我很困惑

时间:2011-02-03 16:51:13

标签: c flex-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 个答案:

答案 0 :(得分:3)

输入的第一个字符既不匹配rule1也不匹配rule2。相反,rule3将输入放到行尾。第3,第4,第6和第7行也是如此。你可能想要一个不那么贪婪的规则3,即一个不消耗空格的规则:

[^ \t\n]*           /* Do nothing */

然后由rule1找到44jdjd。