Note that function consumeAdditiveExpressionTail is tail-recursive (if correctly written).
Rewrite this function using a loop instead of recursive calls;
Instead of writing function consumeAdditiveExpressionTail just to perform a loop, remove this function and place the loop directly in consumeAdditiveExpression.
Note that the resulting function implements the grammar written in EBNF form:
ae ::= c ( + c | - c )*