package loo2.plp.orientadaObjetos1.comando;
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;
/**
* Representa um comando sequencial, ou seja, um comando seguido de outro
* comando.
*/
public class Sequencial implements Comando{
/**
* O primeiro comando.
*/
private Comando comando1;
/**
* O segundo comando.
*/
private Comando comando2;
/**
* Construtor.
* @param comando1 O primeiro comando
* @param comando2 O segundo comando.
*/
public Sequencial(Comando comando1, Comando comando2){
this.comando1 = comando1;
this.comando2 = comando2;
}
/**
* Executa os comandos sequencialmente.
* @param ambiente o ambiente de execu��o.
* @return o ambiente depois de modificado pela execu��o
* dos comandos.
*/
public AmbienteExecucaoOO1 executar(AmbienteExecucaoOO1 ambiente)
throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException,
ObjetoJaDeclaradoException, ObjetoNaoDeclaradoException,
ClasseJaDeclaradaException, ClasseNaoDeclaradaException, EntradaInvalidaException {
ambiente = comando1.executar(ambiente);
ambiente = comando2.executar(ambiente);
return ambiente;
}
/**
* Realiza a verificacao de tipos dos comandos
* @param ambiente o ambiente de compila��o.
* @return true se os comandos s�o bem tipados;
* false caso contrario.
*/
public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
ProcedimentoNaoDeclaradoException, ProcedimentoJaDeclaradoException,
ClasseJaDeclaradaException, ClasseNaoDeclaradaException {
return comando1.checaTipo(ambiente) && comando2.checaTipo(ambiente);
}
}