Ubuntu 在lex上定义表达式';有些信我没写

Ubuntu 在lex上定义表达式';有些信我没写,ubuntu,flex-lexer,lex,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

我已在终端中安装了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}*)*
如果我这样定义字符串:

lex file_name.txt
cc lex.yy.c -o file_name.out 
string ({digit}+{character}+{digit}*{character}*)*
它很好用

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

string [{digit}+{character}+{digit}*{character}*]*
做一些与你期望的不同的事情。它是包含在
[
]
中的字符的零次或多次出现。也就是说,它相当于这些更简单的模式:

string [{}digit+character+*]*
string [{}digtchare+*]*
(除非我有打字错误)。与此不同:

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

这是
中包含的模式的零次或多次重复。这也是:
[a-z | a-z]