package loo2.plp.orientadaObjetos1.comando;
/*
* A execucao de um comando ocorre em um determinado ambiente. O
* resultado de tal execucao � a modifica��o deste ambiente, i.e., comandos
*tem efeito colateral.
*/
import loo2.plp.expressions2.memory.VariavelJaDeclaradaException;
import loo2.plp.expressions2.memory.VariavelNaoDeclaradaException;
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.excecao.declaracao.ProcedimentoJaDeclaradoException;
import loo2.plp.orientadaObjetos1.excecao.declaracao.ProcedimentoNaoDeclaradoException;
import loo2.plp.orientadaObjetos1.excecao.execucao.EntradaInvalidaException;
import loo2.plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
import loo2.plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
/**
* Interface representando um comando na linguagem.
*/
public interface Comando {
/**
* Executa este comando.
* @param ambiente o ambiente que contem o mapeamento entre identificadores
* e valores.
* @return o ambiente modificado pela execu��o do comando.
*/
public AmbienteExecucaoOO1 executar(AmbienteExecucaoOO1 ambiente)
throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException,
ProcedimentoNaoDeclaradoException,ProcedimentoJaDeclaradoException,
ClasseJaDeclaradaException, ClasseNaoDeclaradaException, EntradaInvalidaException;
/**
* Realiza a verificacao de tipos deste comando.
*
* @param ambiente o ambiente que contem o mapeamento entre identificadores
* e tipos.
* @return true se os comando s�o bem tipados;
* false caso contrario.
*/
public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException,
ClasseJaDeclaradaException, ClasseNaoDeclaradaException;
}