0

这是我的 Bison 解析器代码。

statement
    : compound_statement
    | expression_statement
    ;



expression_statement
    : ';'
    | expression ';'                        {cout<<"expr found\n";}
    ;

expression
     : number_expression                    {cout << "number expression\n";}
    ;

number_expression
    : number_arith_expression               {cout << "arith expression\n";}
    ;

number_arith_expression

    : number_idenfiers
    | number_constants
    | number_arith_expression number_arith_expression '+'   { cout<<"found\n";}
    | number_arith_expression number_arith_expression '-'   {}

    ;

number_idenfiers
    : PPNUMVAR                                                  {}
    | PPSYSNUMVAR                                               {}
    ;

number_constants
    : PPFLOAT                                                   {}
    ;

我给了表达式

23 23 +;

我的结果是:

成立

算术表达式

数字表达

行号:1 .. 解析错误

为什么它不在 expression_statment 解析?它不解析分号。我应该改变什么来使用分号?

4

1 回答 1

0

根据您的语法,有效的加法表达式将是两个表达式后跟 a +,但您的输入+在中间有。

于 2016-01-29T09:14:15.867 回答