请在第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);
}
答案 0 :(得分:2)
我不认为你的错误&#34;角色等级的负范围&#34;实际上是在第15,17或19行。我相信它在第6行。您的代码显示为operator [+-*/]
,您似乎在其中表示&#34;符号+
,{{1 },-
和*
&#34;。
然而,/
实际上被解释为&#34;范围&#34;从-
到+
。由于*
是字符43而+
是字符42,因此该范围是向后的。
如果您在*
之前使用-
转义,则不应再出现该错误。