40 lines
1.1 KiB
Java
40 lines
1.1 KiB
Java
package jscl.text;
|
|
|
|
import jscl.math.Generic;
|
|
import jscl.text.msg.Messages;
|
|
|
|
import javax.annotation.Nonnull;
|
|
|
|
/**
|
|
* User: serso
|
|
* Date: 10/27/11
|
|
* Time: 2:44 PM
|
|
*/
|
|
class PlusOrMinusTerm implements Parser<Generic> {
|
|
|
|
public static final Parser<Generic> parser = new PlusOrMinusTerm();
|
|
|
|
private PlusOrMinusTerm() {
|
|
}
|
|
|
|
public Generic parse(@Nonnull Parameters p, Generic previousSumElement) throws ParseException {
|
|
final int pos0 = p.position.intValue();
|
|
|
|
ParserUtils.skipWhitespaces(p);
|
|
|
|
boolean minus = false;
|
|
final int pos1 = p.position.intValue();
|
|
if (pos1 < p.expression.length() && (p.expression.charAt(pos1) == '+' || MinusParser.isMinus(p.expression.charAt(pos1)))) {
|
|
minus = MinusParser.isMinus(p.expression.charAt(pos1));
|
|
p.position.increment();
|
|
} else {
|
|
ParserUtils.throwParseException(p, pos0, Messages.msg_10, '+', '-');
|
|
}
|
|
|
|
final Generic result = ParserUtils.parseWithRollback(TermParser.parser, pos0, previousSumElement, p);
|
|
|
|
return minus ? result.negate() : result;
|
|
}
|
|
|
|
}
|