hay generadores de parásitos disponibles para los que puede definir una gramática.
Pero si solo tienes || y & & como operadores y verdadero y falso como los valores que se puede hacer esto por sí mismo, por implmenting una manera muy sencilla máquina de estados finitos:
1.) Dividir la cadena en las fichas
2.) analizar el la izquierda más valor utilizando Boolean.parseBoolean (token) y es valor seguro en alguna variable de instancia (su estado)
3.) combinar la variable de instancia con el siguiente token booleana utilizando el operador dado
4.) Repite el paso 3 hasta que termines toda la cadena
Esto parece funcionar, aunque no he probado :) 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));
}
}
eso deben darle un valor cirrectly analizado, pero se pone un poco más compleja si se permite que entre paréntesis, por ejemplo;)
divertirse y compruebe aquí la teoría Finite-state_machine
mira la pregunta: http://stackoverflow.com/questions/2605032/using-eval-in-java – Thierry
thanx Thierry, echaremos un vistazo ahora. – Adnan
@ Thierry Creo que esta no es la forma más eficiente de cargar todo el intepreter. – ant