Implicit Multiplication

Dave DeLong edited this page Sep 18, 2015 · 1 revision

The parser recognizes implicit multiplication. For example, we can write 3(4) and understand that the answer should be 12.

We only need 2 tokens in order to recognize that two things are being implicitly multiplied:

Current Token
Number Operator Variable Function
Number Yes Maybe Yes Yes
Operator Maybe Maybe Maybe Maybe
Variable Yes Maybe Yes Yes
Function No Maybe No No

Handling Operators

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 + signs.

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).