@Nonnull
public Operator parse(@Nonnull Parameters p, Generic previousSumElement) throws ParseException {
int pos0 = p.getPosition().intValue();
final String operatorName = Identifier.parser.parse(p, previousSumElement);
if (!valid(operatorName)) {
ParserUtils.throwParseException(p, pos0, Messages.msg_3, operatorName);
}
final Operator operator = OperatorsRegistry.getInstance().get(operatorName);
Operator result = null;
if (operator != null) {
final Generic parameters[] = ParserUtils.parseWithRollback(new ParameterListParser(operator.getMinParameters()), pos0, previousSumElement, p);
result = OperatorsRegistry.getInstance().get(operatorName, parameters);
if (result == null) {
ParserUtils.throwParseException(p, pos0, Messages.msg_2, operatorName);
}
} else {
ParserUtils.throwParseException(p, pos0, Messages.msg_3, operatorName);
}
assert result != null;
return result;
}