Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
Melhorias e Mensagens Amigáveis ao Usuário
Centro de InformáticaUniversidade Federal de Pernambuco
Bruno FelipeMarco AndréPaulo FernandoRodolfo Santos
2
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;
3
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
4
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
5
Visitor
6
Diagrama de Classes
7
Diagrama de Classes com Visitor
8
Expressao.javapublic interface Expressao {
boolean checaTipo() throws VisitorException;
public void accept(LinguagemVisitor lingVisitor) throws VisitorException;
public int getLineExpression();public int getBeginColumnExpression();public int getEndColumnExpression();
}
9
ExpBinaria.java//-----------------Construtor para utilizcao da selecao dos erros no editor.-----------------------
public ExpBinaria(Expressao esq, Expressao dir, String operador) {this.esq = esq;this.dir = dir;this.operador = operador;
}//-----------------------------------------------------------------public boolean checaTipo() throws VisitorException{
if (!getEsq().checaTipo() || !getDir().checaTipo()) { result = false; accept(visit);} else { result = this.checaTipoElementoTerminal();}return result;
//-----------------------------------------------------------Variaveis e metodos utilizados na funcionalidade de selecao dos erros no editor//-----------------------------------------------------------
protected int line;protected int beginColumn;protected int endColumn;
public int getLineExpression() return this.line;
public int getBeginColumnExpression()return this.beginColumn;
public int getEndColumnExpression() return this.endColumn;
10
ExpLength.java//-----------------Construtor para utilizacao da selecao dos erros no editor.----------
public ExpLength(Expressao exp, int line, int beginColumn, int endColumn) {
super(exp, "length");this.line = line;this.beginColumn = beginColumn;this.endColumn = endColumn;
}//--------------------------------------------------------------------------------------------------
protected boolean checaTipoElementoTerminal() throws VisitorException {boolean Result = (getExp().getTipo().eString());if (!Result)
accept(visit);return Result;
}
public void accept(LinguagemVisitor lingVisitor) throws VisitorException {
lingVisitor.visit(this);}
11
LinguagemVisitor.javapublic 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;
12
VisitorExpressoes1.javapublic void visit(ExpLength expLength) throws VisitorException {
if (!expLength.getExp().getTipo().eString()) {
AppletInterpretadorPLP.SelecionarErro(expLength.getExp().getLineExpression(), expLength.getExp().getBeginColumnExpression(), expLength.getExp().getEndColumnExpression());
}}
public void visit(ExpBinaria expBinaria) throws VisitorException {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());}}
13
Telas