Note that function consumeAdditiveExpressionTail is tail-recursive (if correctly written). Note that the resulting function implements the grammar written in EBNF form:
ae ::= c ( + c | - c )*