rex parsing for +, * (M)
M(input) =
    Vresult = V(input),                                   // try for V
    [tree1, residue1] = Vresult,
    residue1 == [] ? Vresult                              // use M -> V

  : failed(tree1) ? Vresult                               // failure

  : first(residue1) == '*' ?

      ( [tree2, residue2] = M(rest(residue1)),            // try M -> V * M
        failed(tree2) ?
          Vresult                                         // use M -> V only
        : [mkTree('*', tree1, tree2), residue2]           // use M -> V + M
      )

  : Vresult;                                              // use M -> V