package li2.plp.imperative2;
import li2.plp.expressions2.memory.IdentificadorJaDeclaradoException;
import li2.plp.expressions2.memory.IdentificadorNaoDeclaradoException;
import li2.plp.imperative1.command.Comando;
import li2.plp.imperative1.memory.AmbienteCompilacaoImperativa;
import li2.plp.imperative1.memory.AmbienteExecucaoImperativa;
import li2.plp.imperative1.memory.EntradaVaziaException;
import li2.plp.imperative1.memory.ErroTipoEntradaException;
import li2.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 ambiente)
throws IdentificadorJaDeclaradoException,
IdentificadorNaoDeclaradoException, EntradaVaziaException, ErroTipoEntradaException {
ambiente = comando.executar(ambiente);
return ambiente.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 ambiente)
throws IdentificadorJaDeclaradoException,
IdentificadorNaoDeclaradoException, EntradaVaziaException {
return comando.checaTipo(ambiente);
}
}