sono disponibili parsergenerator per cui è possibile definire una grammatica.
Ma se hai solo || e & & come operatori e vero e il falso come valori si può facilmente fare questo da soli, per implmenting una semplice macchina a stati finiti:
1.) Dividere la stringa in gettoni
2.) di analizzare la più a sinistra valore utilizzando Boolean.parseBoolean (token) e sicuro il suo valore in qualche variabile di istanza (il tuo stato)
3.) combinare la variabile di istanza con il token successivo booleano utilizzando il determinato operatore
4.) Ripeti il passaggio 3 fino a completare l'intera stringa
Questo sembra funzionare anche se i havent thorougly provato :)
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));
}
}
i thats dovrebbe dare un valore cirrectly analizzato, ma si otterrà un po 'più complessa se si consente staffe per esempio;)
divertirsi e controllare qui per la teoria Finite-state_machine
guarda la domanda: http://stackoverflow.com/questions/2605032/using-eval-in-java – Thierry
thanx Thierry, darà un'occhiata ora. – Adnan
@Thierry Penso che questo non sia il modo più efficace per caricare interi interpreti – ant