package jscl.text; import jscl.math.Generic; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class ExpressionParser implements Parser<Generic> { public static final Parser<Generic> parser = new ExpressionParser(); private ExpressionParser() { } public Generic parse(@Nonnull Parameters p, @Nullable Generic previousSumElement) throws ParseException { final boolean minus = MinusParser.parser.parse(p, previousSumElement); Generic result = TermParser.parser.parse(p, previousSumElement); if (minus) { result = result.negate(); } while (true) { try { result = result.add(PlusOrMinusTerm.parser.parse(p, result)); } catch (ParseException e) { p.exceptionsPool.release(e); break; } } return result; } }