00001 package plp.expressions2.expression; 00002 00003 import plp.expressions2.memory.AmbienteCompilacao; 00004 import plp.expressions2.memory.VariavelJaDeclaradaException; 00005 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00006 00011 public abstract class ExpBinaria implements Expressao { 00012 00016 private Expressao esq; 00017 00021 private Expressao dir; 00022 00026 private String operador; 00027 00035 public ExpBinaria(Expressao esq, Expressao dir, String operador) { 00036 this.esq = esq; 00037 this.dir = dir; 00038 this.operador = operador; 00039 } 00040 00046 public Expressao getEsq() { 00047 return esq; 00048 } 00049 00055 public Expressao getDir() { 00056 return dir; 00057 } 00058 00064 public String getOperador() { 00065 return operador; 00066 } 00067 00073 public String toString() { 00074 StringBuffer sb = new StringBuffer(); 00075 sb.append(esq.toString()); 00076 sb.append(' '); 00077 sb.append(operador); 00078 sb.append(' '); 00079 sb.append(dir.toString()); 00080 return sb.toString(); 00081 } 00082 00094 public boolean checaTipo(AmbienteCompilacao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00095 boolean result = true; 00096 if (!getEsq().checaTipo(amb) || !getDir().checaTipo(amb)) { 00097 result = false; 00098 } 00099 else { 00100 result = this.checaTipoElementoTerminal(amb); 00101 } 00102 return result; 00103 } 00104 00109 protected abstract boolean checaTipoElementoTerminal(AmbienteCompilacao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException; 00110 00111 }