我正在尝试编译此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);
}
当我编译此代码时,它显示&#34; hello.l&#34;,第12行:无法识别的规则 在第12行,代码是 -
{digit}+{{point}{digit+}}? {printf("Number\n");}
这一部分。谁能告诉我这里有什么问题?
答案 0 :(得分:0)
{digit}+{{point}{digit+}}? {printf("Number\n");}
{}
用于表示定义,不用于分组。他们应该包含定义的名称,而不是别的。因此{{point}{digit+}}
格式错误,因为{point}{digit+}
不是定义的有效名称。
因此外部{}
应该是()
而+
digit
应该在{}
之外:
{digit}+({point}{digit}+)? {printf("Number\n");}