00001 package plp.orientadaObjetos1.expressao.unaria; 00002 00003 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException; 00004 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException; 00005 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException; 00006 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException; 00007 import plp.orientadaObjetos1.expressao.Expressao; 00008 import plp.orientadaObjetos1.expressao.valor.Valor; 00009 import plp.orientadaObjetos1.expressao.valor.ValorInteiro; 00010 import plp.orientadaObjetos1.expressao.valor.ValorString; 00011 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00012 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00013 import plp.orientadaObjetos1.util.Tipo; 00014 import plp.orientadaObjetos1.util.TipoPrimitivo; 00015 00016 00020 public class ExpLength extends ExpUnaria { 00021 00029 public ExpLength(Expressao expressao) { 00030 super(expressao, "length"); 00031 } 00032 00043 public Valor avaliar(AmbienteExecucao ambiente) 00044 throws VariavelJaDeclaradaException, 00045 VariavelNaoDeclaradaException, ObjetoNaoDeclaradoException { 00046 return obterTamanhoDoString(ambiente); 00047 } 00048 00060 public boolean checaTipo(AmbienteCompilacao ambiente) 00061 throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException { 00062 boolean result; 00063 if (super.checaTipo(ambiente) && 00064 ((TipoPrimitivo)getExp().getTipo(ambiente)).eString()) { 00065 result = true; 00066 } 00067 else { 00068 result = false; 00069 } 00070 return result; 00071 } 00072 00079 public Tipo getTipo(AmbienteCompilacao ambiente) { 00080 return TipoPrimitivo.TIPO_INTEIRO; 00081 } 00082 00088 private ValorInteiro obterTamanhoDoString(AmbienteExecucao ambiente) 00089 throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException, 00090 ObjetoNaoDeclaradoException{ 00091 return new ValorInteiro (((ValorString)getExp().avaliar(ambiente)).valor().length()); 00092 } 00093 }