00001 package plp.functional3.expression; 00002 00003 import plp.expressions1.util.Tipo; 00004 import plp.expressions1.util.TipoPrimitivo; 00005 import plp.expressions2.expression.ExpBinaria; 00006 import plp.expressions2.expression.Expressao; 00007 import plp.expressions2.expression.Valor; 00008 import plp.expressions2.expression.ValorInteiro; 00009 import plp.expressions2.memory.AmbienteCompilacao; 00010 import plp.expressions2.memory.AmbienteExecucao; 00011 import plp.expressions2.memory.VariavelJaDeclaradaException; 00012 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00013 00014 public class ExpMult extends ExpBinaria { 00015 00026 public ExpMult(Expressao esq, Expressao dir) { 00027 super(esq, dir, "*"); 00028 } 00029 00033 public Valor avaliar(AmbienteExecucao amb) 00034 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00035 return new ValorInteiro(((ValorInteiro) getEsq().avaliar(amb)).valor() 00036 * ((ValorInteiro) getDir().avaliar(amb)).valor()); 00037 } 00038 00052 @Override 00053 protected boolean checaTipoElementoTerminal(AmbienteCompilacao ambiente) 00054 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00055 return getEsq().getTipo(ambiente).eInteiro() 00056 && getDir().getTipo(ambiente).eInteiro(); 00057 } 00058 00066 public Tipo getTipo(AmbienteCompilacao ambiente) { 00067 return TipoPrimitivo.INTEIRO; 00068 } 00069 00070 }
1.5.8