есть парсергенераторы, для которых вы можете определить грамматику.
Но если у вас есть только || и & & как операторы и истинные и ложные ценности, как вы можете легко сделать это самостоятельно, по implmenting очень простой конечный автомат:
1.) Разделить строку на лексемы
2.) разбора оставил наибольшее значение с помощью Boolean.parseBoolean (маркер) и безопасной ее значения в некоторых переменном экземпляре (ваше состояние)
3.) объединить переменный экземпляр со следующей булевой лексемой с помощью данного оператора
4.) Повторите шаг3, пока не закончите всю строку
Это похоже на работу, хотя я нету thorougly тестировал :)
public class BooleanFSParser {
private boolean parse(String data) {
String[] tokens=data.split("\\s");
boolean state=Boolean.parseBoolean(tokens[0]);
for (int i=1;i<(tokens.length/2) + 1;i=i+2){
if (tokens[i].equals("&&")){
state=state && Boolean.parseBoolean(tokens[i+1]);
}else{
state=state || Boolean.parseBoolean(tokens[i+1]);
}
}
return state;
}
public static void main(String[] args) {
BooleanFSParser parser = new BooleanFSParser();
boolean val = parser.parse("true && true || false");
System.out.println(String.valueOf(val));
}
}
Thats должен дать вам cirrectly разобранное значение, но это будет получить немного более сложным, если вы позволяете скобки, например;)
весело и проверить здесь для теории Finite-state_machine
Посмотрите на вопрос: http://stackoverflow.com/questions/2605032/using-eval-in-java – Thierry
thanx Thierry, посмотрим сейчас. – Adnan
@Thierry Я думаю, что это не самый эффективный способ загрузки целого intepreter – ant