这个弹性代码有什么问题?
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");}
我正在尝试编译这个 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");}