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
Download

Apresentacao - Centro de Informática da UFPE