package loo2.plp.orientadaObjetos1.declaracao.variavel;
import loo2.plp.expressions2.memory.VariavelJaDeclaradaException;
import loo2.plp.expressions2.memory.VariavelNaoDeclaradaException;
import loo2.plp.orientadaObjetos1.declaracao.Declaracao;
import loo2.plp.orientadaObjetos1.excecao.declaracao.ClasseJaDeclaradaException;
import loo2.plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
import loo2.plp.orientadaObjetos1.excecao.declaracao.ObjetoJaDeclaradoException;
import loo2.plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
import loo2.plp.orientadaObjetos1.expressao.leftExpression.Id;
import loo2.plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
import loo2.plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
import loo2.plp.orientadaObjetos1.util.Tipo;
/**
* Interface representando uma declara��o de vari�vel.
*/
public interface DecVariavel extends Declaracao {
/**
* Retorna o tipo do identificador a ser declarado no AmbienteCompilacao
* @param id o identificador da declaracao
* @return o tipo do identificador
*/
public Tipo getTipo(Id id)
throws VariavelNaoDeclaradaException ;
/**
* Cria um mapeamento do identificador para o valor da express�o
* desta declara��o no AmbienteExecucao
* @param ambiente o ambiente que contem o mapeamento entre identificadores
* e valores.
* @return o ambiente modificado pela inicializa��o da vari�vel.
*/
public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente)
throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
ClasseJaDeclaradaException, ClasseNaoDeclaradaException,
ObjetoNaoDeclaradoException, ObjetoJaDeclaradoException ;
/**
* Verifica se a declara��o est� bem tipada, ou seja, se a
* express�o de inicializa��o est� bem tipada.
* @param ambiente o ambiente que contem o mapeamento entre identificadores
* e seus tipos.
* @return true se os tipos da declara��o s�o v�lidos;
* false caso contrario.
*/
public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
ClasseJaDeclaradaException, ClasseNaoDeclaradaException;
}