弹性工具出错


/*Regular Definitions*/
delim[tn]
WS{delim}+
letter[A-Za-z]
digit[0-9]
id{letter}({letter|digit})*
number{digit}+(.{digit}+?(E[+-]?{digit}+)?
%%
{WS}{/*do nothing*/}
if{printf("nIF found");return 0;}
then{printf("nTHEN found");return 0;}
else{printf("nELSE found");return 0;}
{id}{printf("nID found");return 0;}
{number}{printf("nNUMBER found");return 0;}
"<"{printf("nLess than symbol found.");return 0;}
"<="{printf("nLess than or Equals to symbol found.");return 0;}
"="{printf("nEquals to symbol found.");return 0;}
"<>"{printf("nNot equals to symbol found.");return 0;}
">"{printf("nGreater than symbol found.");return 0;}
">="{printf("nGreater than or equal to symbol found.");return 0;}
%%

在使用 flex 编译时

G:>flex Lex.l

我收到以下错误:

"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 14: unrecognized rule
"Lex.l", line 27: EOF encountered inside an action

谁能帮我?

谢谢。

1.- 用括号将交替的每个表达式括起来。

{letter}|{digit}

2.- number定义中缺少右括号。我在第一次?之前添加了它,但不确定。

number{digit}+(.{digit}+)?(E[+-]?{digit}+)?

3.-在规则部分中,用空格分隔模式和C代码。

{WS}        {/*do nothing*/}

这应该有效,或者至少编译:

/*Regular Definitions*/
delim[tn]
WS{delim}+
letter[A-Za-z]
digit[0-9]
id{letter}({letter}|{digit})*
number{digit}+(.{digit}+?(E[+-]?{digit}+)?)
%%
{WS}        {/*do nothing*/}
if          {printf("nIF found");return 0;} 
then        {printf("nTHEN found");return 0;} 
else        {printf("nELSE found");return 0;} 
{id}        {printf("nID found");return 0;} 
{number}    {printf("nNUMBER found");return 0;} 
"<"         {printf("nLess than symbol found.");return 0;} 
"<="        {printf("nLess than or Equals to symbol found.");return 0;} 
"="         {printf("nEquals to symbol found.");return 0;} 
"<>"        {printf("nNot equals to symbol found.");return 0;} 
">"         {printf("nGreater than symbol found.");return 0;} 
">="        {printf("nGreater than or equal to symbol found.");return 0;} 
%%

最新更新