Yacc: недопустимые символы: '' - PullRequest
0 голосов
/ 06 мая 2018

Я пишу программу, использующую 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: ‘ ’
...