Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

DecVariavelSimples.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.declaracao.variavel;
00002 
00003 import plp.orientadaObjetos1.excecao.comando.TryCatchException;
00004 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00005 import plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00007 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00008 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
00009 import plp.orientadaObjetos1.expressao.Expressao;
00010 import plp.orientadaObjetos1.expressao.leftExpression.Id;
00011 import plp.orientadaObjetos1.memoria.AmbienteCompilacao;
00012 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
00013 import plp.orientadaObjetos1.util.Tipo;
00014 import plp.orientadaObjetos1.util.TipoClasse;
00015 
00019 public class DecVariavelSimples implements DecVariavel{
00023     private Tipo tipo;
00027     private Id id;
00031     private Expressao expressao;
00038     public DecVariavelSimples(Tipo tipo, Id id, Expressao expressao){
00039         this.tipo = tipo;
00040         this.id = id;
00041         this.expressao = expressao;
00042     }
00043 
00049     public Tipo getTipo(Id id) throws VariavelNaoDeclaradaException{
00050            if(this.id.equals(id)){
00051                return tipo;
00052            }
00053            else {
00054                throw new VariavelNaoDeclaradaException(id);
00055            }
00056     }
00057 
00066     public AmbienteExecucao executar(AmbienteExecucao ambiente)
00067         throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00068                ObjetoNaoDeclaradoException,ObjetoJaDeclaradoException, TryCatchException  {
00069         ambiente.mapValor(id , expressao.avaliar(ambiente));
00070         return ambiente;
00071     }
00072 
00081     public boolean checaTipo(AmbienteCompilacao 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.mapTipo(id, tipo);
00096         }
00097         return resposta;
00098     }
00099 }

Generated on Mon Aug 8 20:20:46 2005 for Linguagem OO1 - Generics by  doxygen 1.4.4