Clone this wiki locally
The parser recognizes implicit multiplication. For example, we can write
3(4) and understand that the answer should be
We only need 2 tokens in order to recognize that two things are being implicitly multiplied:
Handling implicit multiplication when operator tokens are involved is tricky. Under normal circumstances, an operator followed by an operator should not result in implicit multiplication. For example, if you have
"1 + + 3", this should be
"1 + 3" (the second
+ being the unary positive, and is thus discarded). It would be incorrect to insert a multiplier between the two
However, under other circumstances, you do want to insert a multipler. The common case of
"(2)(3)" should result in a multiplier being inserted in between to the inner two parentheses (which are both considered operators by the tokenizer).
Thus, a multiplier is inserted in conjunction with operators if:
- the previous token is a number, a variable, or a left associative unary operator (factorial, closing parenthesis, etc) and
- the current token is a number, a variable, or a right associative unary operator (logical not, opening parenthesis, etc)
Functions and Implicit multiplication
A multiplier token is never inserted after a function token, because the rules of argumentless functions make it impossible for a function token to be followed by anything other than an opening parenthesis (an operator).