package lf3.plp.expressions2.expression; import lf3.plp.expressions1.util.Tipo; import lf3.plp.expressions2.memory.AmbienteCompilacao; import lf3.plp.expressions2.memory.AmbienteExecucao; import lf3.plp.expressions2.memory.VariavelJaDeclaradaException; import lf3.plp.expressions2.memory.VariavelNaoDeclaradaException; /** * Uma expressao é a unidade basica na Linguagem de Expressoes. */ public interface Expressao { /** * Avalia a expressao retornando seu Valor. */ Valor avaliar(AmbienteExecucao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException; /** * Realiza a verificacao de tipos desta expressao. * * @param amb o ambiente que contem o mapeamento entre identificadores * e tipos. * @return true se os tipos da expressao sao validos; * false caso contrario. */ boolean checaTipo(AmbienteCompilacao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException; /** * Retorna os tipos possiveis desta expressao. * * @param amb o ambiente que contem o mapeamento entre identificadores * e tipos. * @return os tipos possiveis desta expressao. */ Tipo getTipo(AmbienteCompilacao amb) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException; /** * * @param ambiente * @return Express�o reduzida sem ocorr�ncia de ids conhecidas. */ Expressao reduzir(AmbienteExecucao ambiente); /** * * @return */ public Expressao clone(); }