import net.objecthunter.exp4j.Expression;
import net.objecthunter.exp4j.ExpressionBuilder;
import net.objecthunter.exp4j.operator.Operator;
import net.objecthunter.exp4j.tokenizer.*;
import java.math.BigDecimal;
public class CustomParser extends ExpressionBuilder {
public CustomParser(String expression) {
super(expression);
}
public Operator factorialOperator() {
return new Operator("!", 1, true, Operator.PRECEDENCE_POWER + 1) {
@Override
public double apply(double... args) {
int arg = (int) args[0];
throw new IllegalArgumentException("Argument for factorial must be a positive integer");
}
double result = 1;
for (int i = 1; i <= arg; i++) {
result *= i;
}
return result;
}
};
}
public static void main(String[] args) {
CustomParser parser = new CustomParser("2!+3^2");
parser.operator(factorialOperator());
Expression expression = parser.build();
double result = expression.evaluate();
}
}