我收到一个错误,在第15,17和19行的字符类中有负面范围

时间:2015-04-30 03:53:40

标签: lex

请在第15,17和19行找到错误:

%{
#include<stdio.h>
int c=0;
FILE *fp;
%}
operator [+-*/]
identifier [a-zA-Z][a-zA-Z0-9]*
number [0-9]+
expression ({identifier}|{number}){operator}({identifier}|{number})
%%
\n { c++; }
^"#".+ ;
^("int "|"float "|"char ").+ ;
"void main()" ;
{identifier}"="({expression}+";") {printf("Valid arithmetic expression       in line %d",c+1);ECHO;printf("\n");}

{identifier}"="({number}|{identifier}";") {printf("Valid assignment statement in line %d",c+1);ECHO;printf("\n");}

({number}|([0-9]+[a-zA-Z0-9]*))"="{expression}+ {printf("Invalid: rules for naming identifier are violated in line %d",c+1);ECHO;printf("\n");}

{identifier}"=;" {printf("Invalid right side of expression missing in   line %d",c+1);ECHO;printf("\n");}

{operator}{operator}+ {printf("Invalid multiple operators cannot occur consecutively in line %d",c+1);ECHO;printf("\n");}  
. ;
%%
main()
{
yyin=fopen("3b.txt","r");
yylex();
fclose(yyin);
}

1 个答案:

答案 0 :(得分:2)

我不认为你的错误&#34;角色等级的负范围&#34;实际上是在第15,17或19行。我相信它在第6行。您的代码显示为operator [+-*/],您似乎在其中表示&#34;符号+,{{1 },-*&#34;。

然而,/实际上被解释为&#34;范围&#34;从-+。由于*是字符43而+是字符42,因此该范围是向后的。

如果您在*之前使用-转义,则不应再出现该错误。