Разбор неявного умножения - PullRequest
1 голос
/ 09 мая 2020

Я пытался настроить довольно простой математический анализатор, и он отлично работает. Только я не могу понять, как ввести подразумеваемое умножение.

Я использовал 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.

...