Я хотел бы иметь возможность оценить логическое выражение, хранящееся в виде строки, например:
"hello" == "goodbye" && 100 < 101
Я знаю, что на SO уже есть тонны подобных вопросов, но я задаю этот, потому что я попробовал самый распространенный ответ на этот вопрос, BeanShell , и он позволяет оценка утверждений, подобных этому
"hello" == 100
без проблем. Кто-нибудь знает о парсере FOSS, который выдает ошибки для таких вещей, как несоответствие операнда? Или в BeanShell есть настройка, которая мне поможет? Я уже пробовал Interpreter.setStrictJava (true).
Для полноты вот код, который я сейчас использую:
Interpreter interpreter = new Interpreter();
interpreter.setStrictJava(true);
String testableCondition = "100 == \"hello\"";
try {
interpreter.eval("boolean result = ("+ testableCondition + ")");
System.out.println("result: "+interpreter.get("result"));
if(interpreter.get("result") == null){
throw new ValidationFailure("Result was null");
}
} catch (EvalError e) {
e.printStackTrace();
throw new ValidationFailure("Eval error while parsing the condition");
}
Edit:
Код, который у меня сейчас есть, возвращает этот вывод
result: false
без ошибок. То, что я хотел бы сделать, это выдать EvalError или что-то , сообщающее мне, что там были несовпадающие операнды.