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; 2 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 3 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 4 Visitor 5 Diagrama de Classes 6 Diagrama de Classes com Visitor 7 Expressao.java public interface Expressao { boolean checaTipo() throws VisitorException; public void accept(LinguagemVisitor lingVisitor) throws VisitorException; public int getLineExpression(); public int getBeginColumnExpression(); public int getEndColumnExpression(); } 8 ExpBinaria.java //----------------------------------------------------------- //-----------------Construtor para utilizcao da selecao edos erros noutilizados editor.----------------------Variaveis metodos na funcionalidade public ExpBinaria(Expressao esq, Expressao dir, String operador) { de selecao dos erros no editor this.esq = esq; //----------------------------------------------------------this.dir = dir; this.operador = operador; protected int line; protected int beginColumn; } protected int endColumn; //----------------------------------------------------------------public boolean checaTipo() throws VisitorException{ public int{ getLineExpression() if (!getEsq().checaTipo() || !getDir().checaTipo()) return this.line; result = false; accept(visit); public int getBeginColumnExpression() } else { return this.beginColumn; result = this.checaTipoElementoTerminal(); } public int getEndColumnExpression() return result; return this.endColumn; 9 ExpLength.java //-----------------Construtor para utilizacao da selecao dos erros no editor.---------public ExpLength(Expressao exp, int line, int beginColumn, int endColumn) { super(exp, "length"); public void accept(LinguagemVisitor lingVisitor) this.line = line; this.beginColumn = beginColumn; throws VisitorException { lingVisitor.visit(this); this.endColumn = endColumn; } }//-------------------------------------------------------------------------------------------------protected boolean checaTipoElementoTerminal() throws VisitorException { boolean Result = (getExp().getTipo().eString()); if (!Result) accept(visit); return Result; } 10 LinguagemVisitor.java public void visit(ExpLength expLength) throws VisitorException; public void visit(ExpMenos expMenos) throws VisitorException; public void visit(ExpNot expNot) throws VisitorException; public void visit(ExpBinaria expBinaria) throws VisitorException; 11 VisitorExpressoes1.java public void visit(ExpLength expLength) throws VisitorException { if (!expLength.getExp().getTipo().eString()) { AppletInterpretadorPLP.SelecionarErro(expLength.getExp().getLineExpression(), expLength.getExp().getBeginColumnExpression(), public void visit(ExpBinaria expBinaria) throws VisitorException { expLength.getExp().getEndColumnExpression()); 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()); } } 12 Telas 13