在lex上定义表达式对某些字母

时间:2015-11-07 14:21:42

标签: ubuntu flex-lexer lex

我在终端上安装了flex 操作系统:ubuntu 15.10

character [a-z|A-Z]
digit [0-9]
digits {digit}{digit}+
string [{digit}+{character}+{digit}*{character}*]*

%%
{string} printf("string ");
%%

编译代码后,对于输入“gg”,输出为“string”。
对于输入“ff”,输出为“ff”。

我正在编译这样的文件:

lex file_name.txt
cc lex.yy.c -o file_name.out 

如果我像这样定义字符串:

string ({digit}+{character}+{digit}*{character}*)*

它工作正常。

是什么原因?
我不允许使用C语言

1 个答案:

答案 0 :(得分:2)

这一行

string [{digit}+{character}+{digit}*{character}*]*

与您的期望有所不同。 []中包含的字符是零次或多次出现。也就是说,它等同于这些更简单的模式:

string [{}digit+character+*]*
string [{}digtchare+*]*

(除非是我的错别字)。它与此不一样:

string ({digit}+{character}+{digit}*{character}*)*

()中包含的模式的零次或多次重复。