入力を実行すると
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 は数字のみです。式は整数で、その間に '+' または '-' があります。
ありがとう。