这个弹性代码有什么问题?

What's wrong with this flex code?

我正在尝试编译这个 flex 代码。

  %{

#include <stdlib.h>
#include "y.tab.h"

%}
digit [0-9]
letter [A-Za-z]
point [.]

%%
{digit}+{{point}{digit+}}?   {printf("Number\n");}
{letter}+   {printf("ID\n");}
("hi"|"oi"|"swagatam")"\n"    { printf("START\n"); /*return HI;*/  }
("tchau"|"bye"|"biday")"\n"   { printf("END\n"); /*return BYE;*/ }
%.                    { yyerror();  }

%%

int main(void)
{
   //yyparse();
   yylex();
   return 0;
}

int yywrap(void)
{  
   return 0;
}

int yyerror(void)
{
    printf("Error\n");
    exit(1);
}

当我编译这段代码时,它显示 "hello.l",第 12 行:无法识别的规则 第 12 行的代码是-

 {digit}+{{point}{digit+}}?   {printf("Number\n");}

这部分。谁能告诉我这里出了什么问题?

{digit}+{{point}{digit+}}?   {printf("Number\n");}

{}用于引用定义,不用于分组。它们应该只包含定义的名称,而不包含其他任何内容。所以 {{point}{digit+}} 格式错误,因为 {point}{digit+} 不是定义的有效名称。

所以外面的 {} 应该是 ()digit+ 应该在 {}:

之外
{digit}+({point}{digit}+)?   {printf("Number\n");}