package loo1.plp.orientadaObjetos1.expressao.leftExpression;
import loo1.plp.expressions2.memory.VariavelJaDeclaradaException;
import loo1.plp.expressions2.memory.VariavelNaoDeclaradaException;
import loo1.plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
import loo1.plp.orientadaObjetos1.expressao.valor.Valor;
import loo1.plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
import loo1.plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
import loo1.plp.orientadaObjetos1.util.Tipo;
/**
* Classe que representa um identificador.
*/
public class Id extends loo1.plp.expressions2.expression.Id implements LeftExpression{ //,IDominio{
/**
* Construtor.
* @param strName Nome do identificador.
*/
public Id(String strName) {
super(strName);
}
/**
* Retorna o nome desse identificador.
* @return o nome do identificador.
*/
public String toString() {
return this.getIdName();
}
/**
* Retorna o valor deste identificador.
* @param ambiente o ambiente de execu��o, com o mapeamento de identificadores
* a valores.
* @return o valor deste identificador
* @throws VariavelNaoDeclaradaException
* @exception VariavelNaoDeclaradaException se este identificador nao
* estiver no ambiente.
*/
public Valor avaliar(AmbienteExecucaoOO1 ambiente)
throws VariavelJaDeclaradaException, ClasseNaoDeclaradaException, VariavelNaoDeclaradaException {
return obterValorDeIdNoAmbiente(ambiente);
}
/**
* Realiza a verificacao de tipos desta expressao.
* @param ambiente o ambiente de compila��o.
* @return true se os tipos da expressao s�o v�lidos;
* false caso contrario.
* @throws VariavelNaoDeclaradaException
* @exception VariavelNaoDeclaradaException se este identificador nao
* estiver no ambiente.
*/
public boolean checaTipo(AmbienteCompilacaoOO1 amb) throws VariavelNaoDeclaradaException {
boolean result = true;
amb.get(this); // verifica se est� no ambiente
return result;
}
/**
* Retorna os tipos possiveis desta expressao.
* @param ambiente o ambiente de compila��o.
* @return os tipos possiveis desta expressao.
* @throws VariavelNaoDeclaradaException
* @exception VariavelNaoDeclaradaException se este identificador nao
* estiver no ambiente.
*/
public Tipo getTipo(AmbienteCompilacaoOO1 amb) throws VariavelNaoDeclaradaException {
return amb.get(this);
}
/**
* Obt�m este identificador.
* @return este Id.
*/
public Id getId(){
return this;
}
/**
* Retorna o valor do Objeto representado por um certo id
* @param ambiente � o Ambiente de Execu��o
* @return o valor do Objeto representado por um certo id
* @throws VariavelNaoDeclaradaException
*/
private Valor obterValorDeIdNoAmbiente(AmbienteExecucaoOO1 ambiente)
throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException {
return ambiente.get(this);
}
}