2011-07-28 66 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應該現在的工作。