/** * calcula qual o elemento de uma expressão que dá erro * * @param elem expressão * @param memory vector de memória * @return o elemento que dá erro */ public static String ErrorExpression(String elem, Vector memory) { String exp = ReplaceVariablesToDefaults(elem, memory); IteratorExpression it = new IteratorExpression(exp); while (it.hasMoreElements()) { if (!Calculator.IsCalculus(it.current())) return it.current(); it.next(); } return "NO ERROR"; }
/** * Calcula o erro de uma expressão * * @param infix string com a expressão * @return string com o erro */ public static String GetError(String infix) { if (!Parentesis.Verify(infix)) return Parentesis.GetError(infix); IteratorExpression it = new IteratorExpression(infix); CalculusElement calc = new CalculusElement(); while (it.hasMoreElements()) { String elem = it.current(); it.next(); if (!calc.IsCalculus(elem) && !Values.IsValue(elem) && !Parentesis.IsParentesis(elem)) return " ERRO : simbolo [" + elem + "] desconhecido "; } return "OK"; }
/** * Verifica se uma string é uma expressão * * @param infix string com a expressão * @return verdadeiro se for uma expressão */ public static boolean IsGood(String infix) { // verificar parentesis if (!Parentesis.Verify(infix)) return false; // verificar valores operadores e funções IteratorExpression it = new IteratorExpression(infix); CalculusElement calc = new CalculusElement(); while (it.hasMoreElements()) { String elem = it.current(); it.next(); if (!calc.IsCalculus(elem) && !Values.IsValue(elem) && !Parentesis.IsParentesis(elem)) return false; } return true; }
/** * verifica se uma expressão é aceitavel de acordo com o vectro de memória * * @param express expressão * @param memory vector de memória * @return verdadeiro se for uma expressão aceitável */ public static boolean IsExpression(String express, Vector memory) { String exp = ReplaceVariablesToDefaults(express, memory); IteratorExpression it = new IteratorExpression(exp); while (it.hasMoreElements()) { String elem = it.current(); if (!elem.equals("(") && !elem.equals(")") && !elem.equals(",") && !Calculator.IsCalculus(elem) && !Values.IsValue(elem)) return false; it.next(); } return true; }
public static String ReplaceVariablesToDefaults(String expr, Vector memory, int tryUnknow) { StringBuffer newExpr = new StringBuffer(); // iterador de elementos do codigo IteratorExpression tok = new IteratorExpression(expr); Symbol var; String elem; while (tok.hasMoreElements()) { elem = tok.current(); tok.next(); var = Variable.getVariable(elem, memory); // se for uma variavel vai selecionar o valor if (var != null) { if (var.getType() != var.DESCONHECIDO) newExpr.append(var.getDefaultValue() + " "); else newExpr.append(Symbol.getDefaultValue(tryUnknow) + " "); } // senao mete o elmento else newExpr.append(elem + " "); } return newExpr.toString().trim(); }