我在终端上安装了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语言
答案 0 :(得分:2)
这一行
string [{digit}+{character}+{digit}*{character}*]*
与您的期望有所不同。 [
和]
中包含的字符是零次或多次出现。也就是说,它等同于这些更简单的模式:
string [{}digit+character+*]*
string [{}digtchare+*]*
(除非是我的错别字)。它与此不一样:
string ({digit}+{character}+{digit}*{character}*)*
是(
和)
中包含的模式的零次或多次重复。