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