package li2.plp.imperative1.command;
import li2.plp.expressions2.expression.Expressao;
import li2.plp.imperative1.memory.AmbienteExecucaoImperativa;
import li2.plp.imperative1.memory.AmbienteCompilacaoImperativa;
import li2.plp.expressions2.memory.VariavelNaoDeclaradaException;
import li2.plp.expressions2.memory.VariavelJaDeclaradaException;
public class Write implements IO {
private Expressao expressao;
public Write(Expressao expressao) {
this.expressao = expressao;
}
/**
* Escreve na saida padr�o.
*
* @param ambiente
* o ambiente de execu��o.
*
* @return o ambiente depois de modificado pela execu��o do comando
* write.
*
*/
public AmbienteExecucaoImperativa executar(
AmbienteExecucaoImperativa ambiente)
throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException {
ambiente.write(expressao.avaliar(ambiente));
return ambiente;
}
/**
* Realiza a verificacao de tipos da express�o a ser escrita na pelo comando
* write
*
* @param ambiente
* o ambiente de compila��o.
* @return true se a express�o a ser escrita est� bem tipada;
* false caso contrario.
*/
public boolean checaTipo(AmbienteCompilacaoImperativa ambiente)
throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException {
return expressao.checaTipo(ambiente);
}
}