【发布时间】:2014-01-20 04:05:33
【问题描述】:
一个简单的计算器只支持 + - * / 和整数。我使用 GNU/Linux。
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*
为什么以及如何解决它,谢谢!
【问题讨论】:
-
语法错误意味着输入数据错误,但您没有提供的一件事是输入数据。 '\r' 有可能吗?
-
@davidusrex 我在这篇文章的底部提供了输入数据(在 "runtime-error"... 之后),我使用的是 linux 所以真的有 '\n' 而不是 '\r' ?谢谢。