private Val moreTerms(Val val) { Token t = lex.nextToken(); if (t.matchOperator("+")) { Val rVal = levelFactor(); Val eval; if (val.getType() == Val.Type.string) { eval = new Str(val.evalStr(env) + rVal.evalStr(env)); } else { eval = new Num(val.evalNum(env) + rVal.evalNum(env)); } return moreTerms(eval); } else if (t.matchOperator("-")) { Val rVal = levelFactor(); Val eval = new Num(val.evalNum(env) - rVal.evalNum(env)); return moreTerms(eval); } else { lex.returnToken(); return val; } }