130 likes | 226 Views
Melhorias e Mensagens Amigáveis ao Usuário. Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos. Objetivos do Projeto. Objetivo Geral
E N D
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos
Objetivos do Projeto • Objetivo Geral • Implantar melhorias no editor utilizado no ensino da disciplina PLP, aproveitando o projeto desenvolvido em 2009.1, pelos alunos: Namedin Teles e Rafael Lucena • Objetivos Específicos • Seleção da linha e/ou operador com erro; • Sintaxe highlight;
Visitor • O padrão Visitor é usado quando se quer adicionar funcionalidades a uma composição de objetos e encapsulamento não é importante • Vantagens • Permite adicionar operações a uma estrutura composta sem mudar a estrutura em si • Adicionar novas operações é relativamente fácil • O código das operações realizadas pelo Visitor é centralizado
Visitor • Desvantagens • O encapsulamento das classes compostas é quebrado quando o Visitor é usado • Como uma função de travessia está envolvida, mudanças à estrutura se tornam mais difíceis
Expressao.java public interface Expressao { booleanchecaTipo() throwsVisitorException; publicvoidaccept(LinguagemVisitorlingVisitor) throwsVisitorException; publicintgetLineExpression(); publicintgetBeginColumnExpression(); publicintgetEndColumnExpression(); }
ExpBinaria.java //----------------------------------------------------------- Variaveis e metodos utilizados na funcionalidade de selecao dos erros no editor //----------------------------------------------------------- protectedintline; protectedintbeginColumn; protectedintendColumn; publicintgetLineExpression() returnthis.line; publicintgetBeginColumnExpression() returnthis.beginColumn; publicintgetEndColumnExpression() returnthis.endColumn; //-----------------Construtor para utilizcao da selecao dos erros no editor.----------------------- publicExpBinaria(Expressaoesq, Expressaodir, String operador) { this.esq = esq; this.dir = dir; this.operador = operador; } //----------------------------------------------------------------- publicbooleanchecaTipo() throwsVisitorException{ if (!getEsq().checaTipo() || !getDir().checaTipo()) { result = false; accept(visit); } else { result = this.checaTipoElementoTerminal(); } returnresult;
ExpLength.java public void accept(LinguagemVisitorlingVisitor) throws VisitorException { lingVisitor.visit(this); } //-----------------Construtor para utilizacao da selecao dos erros no editor.---------- public ExpLength(Expressao exp, int line, intbeginColumn, intendColumn) { super(exp, "length"); this.line = line; this.beginColumn = beginColumn; this.endColumn = endColumn; }//-------------------------------------------------------------------------------------------------- protected booleanchecaTipoElementoTerminal() throws VisitorException { boolean Result = (getExp().getTipo().eString()); if (!Result) accept(visit); returnResult; }
LinguagemVisitor.java public void visit(ExpLengthexpLength) throws VisitorException; public void visit(ExpMenosexpMenos) throws VisitorException; public void visit(ExpNotexpNot) throws VisitorException; public void visit(ExpBinariaexpBinaria) throws VisitorException;
VisitorExpressoes1.java publicvoidvisit(ExpBinariaexpBinaria) throwsVisitorException { if (!expBinaria.getEsq().checaTipo()) { AppletInterpretadorPLP.SelecionarErro(expBinaria.getEsq().getLineExpression(), expBinaria.getEsq().getBeginColumnExpression(), expBinaria.getEsq().getEndColumnExpression()); } else { AppletInterpretadorPLP.SelecionarErro(expBinaria.getDir().getLineExpression(), expBinaria.getDir().getBeginColumnExpression(), expBinaria.getDir().getEndColumnExpression()); } } public void visit(ExpLengthexpLength) throws VisitorException { if (!expLength.getExp().getTipo().eString()) { AppletInterpretadorPLP.SelecionarErro(expLength.getExp().getLineExpression(), expLength.getExp().getBeginColumnExpression(), expLength.getExp().getEndColumnExpression()); } }