Почему мой калькулятор всегда сообщает о «синтаксической ошибке»? - PullRequest
0 голосов
/ 28 июля 2011

Он основан на этой статье , но использует lex вместо того, чтобы самому его реализовать.

Но я пробовал различные выражения, например 2+3, все не удалось ...

lex:

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;
}
;

%%

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

сначала при удалении теста на 0, т. Е.

0   {
    yylval = atoi(yytext);
}

, это вам не поможет. Это должно сработать сейчас.

0 голосов
/ 01 августа 2011

Это из-за:

[ \t\n]+    ; 

Переместить \n в [-+*/()].

...