package le1.plp.expressions1.expression; import le1.plp.expressions1.util.Tipo; import le1.plp.expressions1.util.TipoPrimitivo; import le1.plp.expressions2.memory.AmbienteCompilacao; import le1.plp.expressions2.memory.AmbienteExecucao; /** * Um objeto desta classe representa uma Expressao de Negacao logica. */ public class ExpNot extends ExpUnaria{ /** * Controi uma Expressao de negacao logica com expressao * especificada * @param exp Expressao a ser negada. Assume-se que sua avaliacao resulta * em ValorBooleano. */ public ExpNot( Expressao exp) { super(exp, "~"); } /** * Retorna o valor da Expressao de negacao logica * * @param amb * o ambiente de execu��o. */ public Valor avaliar(AmbienteExecucao amb) { return new ValorBooleano(!((ValorBooleano) getExp().avaliar(amb)).valor()); } /** * Realiza a verificacao de tipos desta expressao. * * @param amb * o ambiente de compila��o. * * @return true se os tipos da expressao sao validos; * false caso contrario. */ protected boolean checaTipoElementoTerminal(AmbienteCompilacao amb) { return (getExp().getTipo(amb).eBooleano()); } /** * Retorna os tipos possiveis desta expressao. * * @param amb * o ambiente de compila��o. * * @return os tipos possiveis desta expressao. */ public Tipo getTipo(AmbienteCompilacao amb) { return TipoPrimitivo.BOOLEANO; } }