package le1.plp.expressions1.expression;
import le1.plp.expressions2.memory.AmbienteCompilacao;
/**
* Uma expressao unaria contem uma expressao e um operador sobre a mesma.
*/
public abstract class ExpUnaria implements Expressao {
/**
* Expressao contida pela expressao unaria
*/
private Expressao exp;
/**
* Representacao do operador desta expressao unaria.
*/
private String operador;
/**
* Construtor da classe.
*
* @param exp
* expressao contida pela expressao unaria.
*/
public ExpUnaria(Expressao exp, String operador) {
this.exp = exp;
this.operador = operador;
}
/**
* Retorna a expressao contida pela expressao unaria
*
* @return a expressao contida pela expressao unaria
*/
public Expressao getExp() {
return exp;
}
/**
* Retorna a representacao do operador desta expressao unaria.
*
* @return a representacao do operador desta expressao unaria.
*/
public String getOperador() {
return operador;
}
/**
* Retorna uma representacao String desta expressao. Util para depuracao.
*
* @return uma representacao String desta expressao.
*/
@Override
public String toString() {
return String.format(" %s %s", operador, exp);
}
/**
* Realiza a verificacao de tipos desta expressao.
*
* @param amb
* o ambiente de compila��o.
* @return true se os tipos das subexpressoes sao validos;
* false caso contrario.
*/
public boolean checaTipo(AmbienteCompilacao amb) {
return getExp().checaTipo(amb) && this.checaTipoElementoTerminal(amb);
}
/**
* M�todo 'template' que ser� implementado nas subclasses para checar o tipo
* do head terminal
*/
protected abstract boolean checaTipoElementoTerminal(AmbienteCompilacao amb);
}