Compiler construction 什么';这个flex代码有什么问题?

Compiler construction 什么';这个flex代码有什么问题?,compiler-construction,flex-lexer,Compiler Construction,Flex Lexer,我正在尝试编译这个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"); /*ret

我正在尝试编译这个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);
}
这部分。谁能告诉我这里怎么了

{digit}+{{point}{digit+}}?   {printf("Number\n");}
{}
用于引用定义,而不是用于分组。它们应该包含定义的名称,而不包含其他内容。因此,
{{point}{digit+}}
格式不正确,因为
{point}{digit+}
不是定义的有效名称

因此,外部的
{}
应该是
()
,而
数字的
+
应该在
{}
之外:

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