package jscl.text;
import jscl.math.Generic;
import jscl.util.ArrayUtils;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
public class ParameterListParser implements Parser<Generic[]> {
public static final Parser<Generic[]> parser1 = new ParameterListParser();
private final int minNumberOfParameters;
private ParameterListParser() {
this.minNumberOfParameters = 1;
}
public ParameterListParser(int minNumberOfParameters) {
this.minNumberOfParameters = minNumberOfParameters;
}
@Nonnull
public Generic[] parse(@Nonnull Parameters p, Generic previousSumElement) throws ParseException {
int pos0 = p.position.intValue();
final List<Generic> result = new ArrayList<Generic>();
ParserUtils.tryToParse(p, pos0, '(');
try {
result.add(ExpressionParser.parser.parse(p, previousSumElement));
} catch (ParseException e) {
if (minNumberOfParameters > 0) {
p.position.setValue(pos0);
throw e;
} else {
p.exceptionsPool.release(e);
}
}
while (true) {
try {
result.add(CommaAndExpression.parser.parse(p, previousSumElement));
} catch (ParseException e) {
p.exceptionsPool.release(e);
break;
}
}
ParserUtils.tryToParse(p, pos0, ')');
return ArrayUtils.toArray(result, new Generic[result.size()]);
}
}