package li1.plp.imperative1.command; 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.expressions2.memory.IdentificadorJaDeclaradoException; import li1.plp.expressions2.memory.IdentificadorNaoDeclaradoException; public class SequenciaComando implements Comando { private Comando comando1; private Comando comando2; public SequenciaComando(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. * @throws ErroTipoEntradaException * */ public AmbienteExecucaoImperativa executar( AmbienteExecucaoImperativa ambiente) throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException, ErroTipoEntradaException { return comando2.executar(comando1.executar(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(AmbienteCompilacaoImperativa ambiente) throws IdentificadorJaDeclaradoException, IdentificadorNaoDeclaradoException, EntradaVaziaException { return comando1.checaTipo(ambiente) && comando2.checaTipo(ambiente); } }