Я пытаюсь написать грамматику, которая допускает
- целые числа со знаком (т.е. целые числа со знаком или без него;
3
, -2
, +5
) - Унарный минус (
-
) - Двоичное сложение и вычитание (
+
, -
)
Вот соответствующая грамматика:
expr: INTLITER
| unaryOp expr
| expr binaryOp expr
| OPEN_PAREN expr CLOSE_PAREN
;
unaryOp: MINUS ; // Other operators ommitted for clarity
binaryOp: PLUS | MINUS ;
INTLITER: INTSIGN? DIGIT+ ;
fragment INTSIGN : PLUS | MINUS
WS: [ \r\n\t] -> skip ; // Ignore whitespace
Я нахожу странную проблему с пробелами.
Рассмотрим выражение (2+ 1)
; это дает правильное дерево разбора, как и ожидалось, примерно так:
Однако (2+1)
дает это дерево разбора:
Поскольку правило WS
означает, что пробел игнорируется, как пробелы влияют на дерево разбора?
Как я могу решить эту проблему?