function parseImplicitMultiplication(state) {
    var node, last, previous;
    node = parseRule2(state);
    last = node;
    previous = last;

    while (true) {
      if (state.tokenType === TOKENTYPE.SYMBOL || state.token === 'in' && type.isConstantNode(node) || state.tokenType === TOKENTYPE.NUMBER && !type.isConstantNode(last) && (!type.isOperatorNode(last) || last.op === '!') || state.token === '(') {
        // parse implicit multiplication
        //
        // symbol:      implicit multiplication like '2a', '(2+3)a'
        // number:      implicit multiplication like '(2+3)2'
        // parenthesis: implicit multiplication like '2(3+4)', '(3+4)(1+2)'
        //
        // or join space separated symbols like 'a b' and 'a 1'
        last = parseRule2(state);

        if (previous instanceof SymbolNode && previous.name !== 'i' && last instanceof SymbolNode && last.name !== 'i') {
          previous.name += ' ' + last.name;
        } else if (previous instanceof SymbolNode && previous.name !== 'i' && last instanceof ConstantNode) {
          previous.name += ' ' + last.value;
        } else {
          node = new OperatorNode('*', 'multiply', [node, last], true
          /* implicit */
          );
          previous = last;
        }
      } else {
        break;
      }
    }

    return node;
  }
implicit multiplication
@return {Node} node
@private