A rex version of parsing (1)
// parse function for auxiliary A, rules A -> V | V + A

A(input) =
    Vresult = V(input),                                   // try for V
    [tree1, residue1] = Vresult,
    residue1 == [] ? Vresult                              // use A -> V

  : failed(tree1) ? Vresult                               // failure

  : first(residue1) == '+' ?

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

  : Vresult;                                              // use A -> V