package li1.plp.imperative1;
import li1.plp.expressions2.memory.IdentificadorJaDeclaradoException;
import li1.plp.expressions2.memory.IdentificadorNaoDeclaradoException;
import li1.plp.imperative1.command.Comando;
import li1.plp.imperative1.memory.AmbienteCompilacaoImperativa;
import li1.plp.imperative1.memory.AmbienteExecucaoImperativa;
import li1.plp.imperative1.memory.EntradaVaziaException;
import li1.plp.imperative1.memory.ErroTipoEntradaException;
import li1.plp.imperative1.memory.ListaValor;
public class Programa {
private Comando comando;
public Programa(Comando comando){
this.comando = comando;
}
/**
* Executa o programa.
*
* @param ambiente o ambiente de execu��o.
*
* @return o ambiente depois de modificado pela execu��o
* do programa.
* @throws ErroTipoEntradaException
*
* @exception EntradaNaoFornecidaException se n�o for fornecida
* a tail de valores de entrada do programa.
*
*/
public ListaValor executar(AmbienteExecucaoImperativa ambienteExecucao)
throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException, ErroTipoEntradaException {
ambienteExecucao = comando.executar(ambienteExecucao);
return ambienteExecucao.getSaida();
}
/**
* Realiza a verificacao de tipos do programa
*
* @param ambiente o ambiente de compila��o.
* @return true se o programa est� bem tipado;
* false caso contrario.
*
* @exception EntradaNaoFornecidaException se n�o for fornecida
* a tail de valores de entrada do programa.
*
*/
public boolean checaTipo(AmbienteCompilacaoImperativa ambienteCompilacao)
throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException {
return comando.checaTipo(ambienteCompilacao);
}
}