00001 package plp.functional3.expression; 00002 00003 import plp.expressions1.util.Tipo; 00004 import plp.expressions1.util.TipoPrimitivo; 00005 import plp.expressions2.expression.ExpUnaria; 00006 import plp.expressions2.expression.Expressao; 00007 import plp.expressions2.expression.Valor; 00008 import plp.expressions2.memory.AmbienteCompilacao; 00009 import plp.expressions2.memory.AmbienteExecucao; 00010 import plp.expressions2.memory.VariavelJaDeclaradaException; 00011 import plp.expressions2.memory.VariavelNaoDeclaradaException; 00012 import plp.functional3.util.ListaVaziaException; 00013 import plp.functional3.util.TipoLista; 00014 00015 public class ExpSize extends ExpUnaria{ 00016 00023 public ExpSize(Expressao exp) { 00024 super(exp, "head"); 00025 } 00026 00027 @Override 00028 protected boolean checaTipoElementoTerminal(AmbienteCompilacao amb) 00029 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00030 Tipo tipoExp = getExp().getTipo(amb); 00031 return tipoExp.eIgual(new TipoLista()); 00032 } 00033 00034 public Valor avaliar(AmbienteExecucao amb) 00035 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00036 ValorLista lista = (ValorLista) this.getExp().avaliar(amb); 00037 return (Valor) lista.size(); 00038 } 00039 00040 public Tipo getTipo(AmbienteCompilacao amb) 00041 throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException { 00042 return TipoPrimitivo.INTEIRO; 00043 } 00044 00045 }
1.5.8