Я пытался настроить довольно простой математический анализатор, и он отлично работает. Только я не могу понять, как ввести подразумеваемое умножение.
Я использовал lark
в качестве парсера lalr (1).
Вот самый грамматики:
?start: expression
?expression: sub
?sub: plus ("-" plus)*
?plus: times ("+" times)*
?times: divide ("*" divide)*
?divide: power ("/" power)?
?power: unary ("^" unary)*
?unary: positive
| negative
| atom
?atom: "(" expression ")"
| numeric
| symbol
positive: "+" unary
negative: "-" unary
?numeric: FLOAT
| INT
?symbol: WORD
%import common.WORD
%import common.INT
%import common.FLOAT
%import common.WS_INLINE
%ignore WS_INLINE
Как мне go добавить оператор времени и неявный оператор времени?
Сделать оператор времени «*» необязательным, работает нормально, за исключением того, что сложение / вычитание не не работает, потому что вместо этого он интерпретируется как унарный положительный / отрицательный. x - y
интерпретируется как x times -y
, но должно быть x sub y
.