SimplesDecVariavel.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.declaracao.variavel;
00002 
00003 import plp.expressions2.memory.VariavelJaDeclaradaException;
00004 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00007 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00008 import plp.orientadaObjetos1.expressao.Expressao;
00009 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00010 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
00011 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
00012 import plp.orientadaObjetos1.util.Tipo;
00013 import plp.orientadaObjetos1.util.TipoClasse;
00014 
00018 public class SimplesDecVariavel implements DecVariavel{
00022     private Tipo tipo;
00026     private Id id;
00030     private Expressao expressao;
00037     public SimplesDecVariavel(Tipo tipo, Id id, Expressao expressao){
00038         this.tipo = tipo;
00039         this.id = id;
00040         this.expressao = expressao;
00041     }
00042 
00048     public Tipo getTipo(Id id) throws VariavelNaoDeclaradaException{
00049            if(this.id.equals(id)){
00050                return tipo;
00051            }
00052            else {
00053                throw new VariavelNaoDeclaradaException(id);
00054            }
00055     }
00056 
00066     public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente)
00067         throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00068                ObjetoNaoDeclaradoException,ObjetoJaDeclaradoException, ClasseNaoDeclaradaException  {
00069         ambiente.map(id , expressao.avaliar(ambiente));
00070         return ambiente;
00071     }
00072 
00081     public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
00082         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00083                ClasseNaoDeclaradaException {
00084         boolean resposta = false;
00085         if ( expressao.checaTipo(ambiente) ) {
00086             if( tipo instanceof TipoClasse) {
00087                 resposta = expressao.getTipo(ambiente).equals(TipoClasse.TIPO_NULL) ||
00088                            expressao.getTipo(ambiente).equals(tipo);
00089             }
00090             else {
00091                 resposta = expressao.getTipo(ambiente).equals(tipo);
00092             }
00093         }
00094         if(resposta) {
00095             ambiente.map(id, tipo);
00096         }
00097         return resposta;
00098     }
00099 }

Generated on Tue Sep 12 21:52:07 2006 for PLP by  doxygen 1.4.7