我正在使用flex / bison编写程序来评估算术表达式。我无法弄清楚lex / yacc文件中的错误。它说''是一个无效的角色。如何在lex文件中添加空格作为规则,以使其不被视为无效?
Lex计划
%{
#include<math.h>
extern yylval;
%}
%%
[0-9]+ {yylval=atoi(yytext);return NUM;}
[+] {return '+';}
[-] {return '-';}
[*] {return '*';}
[/] {return '/';}
. {return yytext[0];}
\n return 0;
%%
的Yacc:
%{
#include<stdio.h>
%}
%token NUM
%left '-' '+'
%right '*' '/'
%start S
%%
S : exp{printf("%d\n",$$);}
;
exp : exp '+' exp{$$=$1+$3;}
| exp'-'exp{$$=$1-$3;}
| exp'*'exp{$$=$1*$3;}
| exp'/'exp {if($3==0) exit(0);
else
$$=$1/$3;
}
|NUM
;
%%
#include "lex.yy.c"
void main()
{
printf("Enter the Expr. in terms of integers\n");
yyparse();
printf("Valid");
}
yywrap(){}
yyerror()
{
printf("Error\n");
}
这是错误:
arith.y:5.11: error: invalid characters: ‘ ’
arith.y:7.15: error: invalid characters: ‘ ’
arith.y:10.34: error: invalid characters: ‘ ’
arith.y:12.39: error: invalid characters: ‘ ’
arith.y:13.37: error: invalid characters: ‘ ’
arith.y:14.37: error: invalid characters: ‘ ’