package lf2.plp.functional1.declaration;
import java.util.Map;
import lf2.plp.expressions1.util.Tipo;
import lf2.plp.expressions2.expression.Id;
import lf2.plp.expressions2.expression.Valor;
import lf2.plp.expressions2.memory.AmbienteCompilacao;
import lf2.plp.expressions2.memory.AmbienteExecucao;
import lf2.plp.expressions2.memory.VariavelJaDeclaradaException;
import lf2.plp.expressions2.memory.VariavelNaoDeclaradaException;
import lf2.plp.functional2.expression.ValorFuncao;
public interface DeclaracaoFuncional {
/**
* Realiza a verificacao de tipos desta declara��o.
*
* @param amb o ambiente de compila��o.
* @return true se os tipos da expressao sao validos;
* false caso contrario.
* @exception VariavelNaoDeclaradaException se existir um identificador
* nao declarado no ambiente.
* @exception VariavelNaoDeclaradaException se existir um identificador
* declarado mais de uma vez no mesmo bloco do ambiente.
*/
public boolean checaTipo(AmbienteCompilacao ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException;
public void elabora(AmbienteExecucao amb, AmbienteExecucao aux) throws VariavelJaDeclaradaException;
public void elabora(AmbienteCompilacao amb, AmbienteCompilacao aux) throws VariavelJaDeclaradaException;
public void incluir(AmbienteExecucao amb, AmbienteExecucao aux) throws VariavelJaDeclaradaException;
public void incluir(AmbienteCompilacao amb, AmbienteCompilacao aux, boolean incluirCuringa) throws VariavelJaDeclaradaException;
public void reduzir(AmbienteExecucao amb);
public DeclaracaoFuncional clone();
}