Yacc:字符无效:''

时间:2018-05-06 13:12:17

标签: flex-lexer yacc

我正在使用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: ‘ ’

0 个答案:

没有答案