一个简单的计算器只支持+ - * /和整数。我使用GNU/Linux。lex和yacc:一个带语法错误的简单计算器
hoc1.l:
%{
#include "y.tab.h"
extern int yylval;
%}
%%
[ \t] { ; }
[0-9]+ { sscanf(yytext, "%d", &yylval); printf("\nget %d\n", yylval); return NUMBER; }
\n {return 0;}
%%
int yywrap(void) {
return 1;
}
hoc1.y
%{
#include<stdio.h>
#define YYSTYPE int
%}
%token NUMBER
%left '+' '-'
%left '*' '/'
%%
list:
| list '\n'
| list expr '\n' {printf("\t%d\n",$2);}
;
expr: NUMBER { $$ = $1; }
| expr '+' expr {$$ = $1+$3;}
| expr '-' expr {$$ = $1-$3;}
| expr '*' expr {$$ = $1*$3;}
| expr '/' expr {$$ = $1/$3;}
;
%%
int main(void)
{
yyparse();
return 0;
}
int yyerror(char *s) {
fprintf(stderr, "*%s*\n", s);
return 0;
}
运行时错误:
% ./hoc
8+9
get 8
+
get 9
*syntax error*
为什么和如何来解答它,THX!
语法错误意味着错误的输入数据,但您没有提供的是输入数据。 '\ r'是否可能? –
@davidusrex我在这篇文章的底部提供了输入数据(在“runtime-error”之后......)并且我使用了linux,所以真的有'\ n'而不是'\ r'?谢谢。 – songhir