2011-07-28 65 views
0

它基于this article,但使用lex而不是自己实现它。为什么我的计算器总是报告“语法错误”?

但我已经试过像2+3各种表情,都以失败告终......

法:

0 { 
     yylval = atoi(yytext); 
    } 

[1-9][0-9]* { 
       yylval = atoi(yytext); 
       return NUM; 
      } 

[-+*/()] { 
       return *yytext; 
      } 

[ \t\n]+ ; 

.   yyerror("Unknown character"); 

YACC:

%start prob 

%token NUM 

%% 

prob : expr '\n' 
{ 
    printf("\t=%X\n", $1); 
    return 0; 
} 
; 

expr : expr '+' term 
{ 
    $$ = $1 + $3; 
} 
| expr '-' term 
{ 
    $$ = $1 - $3; 
} 
| term 
{ 
    $$ = $1; 
} 
; 

term : term '*' NUM 
{ 
    $$ = $1 * $3; 
} 
| term '/' NUM 
{ 
    $$ = $1/$3; 
} 
| '(' expr ')' 
{ 
    $$ = $2; 
} 
| NUM 
{ 
    $$ = $1; 
} 
; 

%% 

回答

0

这是因为:

[ \t\n]+ ; 

M Ove \n[-+*/()]

0

第一后删除测试为0即

0 { 
    yylval = atoi(yytext); 
} 

这不会帮助you.this应该现在的工作。