0

入力を実行すると

integer function () :
2+2+2;
integer x;
3-1-2;
end.

私の文法について:

evaluator
   :    type 'function' '(' ')' ':'
        (expression ';' | declaration ';')*
        'end' '.'
        EOF
   ;


declaration
    :   type IDENT (':=' expression)? ';'
    ;

type
    :   'integer'
    |   'double'
    |   'boolean'
    |   'void'
    ;

term
    :   IDENT
    |   '(' expression ')'
    |   INTEGER
    ;

unary
    :   ('+' | '-')* term
    ;

mult
    :   unary (('*' | '/' | 'mod') unary)*
    ;

expression
    :   mult (('+' | '-') mult)*
    ;

3入力からの文字で不一致のトークン例外が発生します\u000F。入力から行を消去integer x;すると、すべて正常に動作します。どういう\u000F意味で、なぜそれが期待されているのですか?

すべてのルールを書き直そうとしましたが、何も役に立ちません。

IDENT は文字のみ、INTEGER は数字のみです。式は整数で、その間に '+' または '-' があります。

ありがとう。

4

1 に答える 1