我刚开始用Flex。这是我的lex文件:
%{ #include <stdio.h> %} %% \w[\w\d]+ printf("WORD\n"); . printf("OTHER\n"); %% int main() { yylex(); return 0; }
然后我用
flex lexfile.l && gcc lex.yy.c -ll
但是,在运行之后
echo "hello" | ./a.out
我明白了
UNKNOWN UNKNOWN UNKNOWN UNKNOWN UNKNOWN
为什么我不能
WORD
?
啊。似乎Flex的regex版本不理解\w和\d。替换为
[A-Za-z][A-Za-z0-9]+
而且效果很好。