Upload
eve-moses
View
20
Download
0
Embed Size (px)
DESCRIPTION
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 - PowerPoint PPT Presentation
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 do erro;• Sintaxe highlight;
3
Principais Mudanças LE1
Classes: ExpAnd, ExpConcat, ExpEquals, ExpLength, ExpMenos, ExpNot, ExpOr, ExpSoma, ExpSub.
Mudanças no construtor, agora recebendo os valores do posicionamento do token no componente de texto.
4
Principais Mudanças LE1
Classes: ExpAnd, ExpConcat, ExpEquals, ExpLength, ExpMenos, ExpNot, ExpOr, ExpSoma, ExpSub.
ChecaTipoElementoTerminal: – acrescentamos o lançamento de VisitorException e também criamos
uma variável para receber o retorno e testá-lo antes de retornar a função. Se algum erro for encontrado chamamos o accept(visit).
5
Principais Mudanças LE1
Classes: ExpBinaria e ExpUnaria
Passou a herdar de uma classe abstrata ao invés de implementar uma interface. Expressao agora é uma classe abstrata.
checaTipo: – lançamento de VisitorException e uma variável para testar o retorno.
checaTipoElementoTerminal: – lançamento de VisitorException.– adição do método public void accept(LinguagemVisitor) throws
VisitorException
6
Principais Mudanças LE1
Classes: ExpBinaria e ExpUnaria
7
Principais Mudanças LE1
Classe: Expressao
Deixou de ser uma interface e passou a ser uma classe abstrata.
Foi acrescentado um atributo protected static LinguagemVisitor.
Passou a ser classe abstrata.– avaliar(), checaTipo(), getTipo() se tornaram métodos abstratos.
Acrescentado variáveis e métodos relacionados ao erro:– Variáveis: line, beginColumn e endColumn.– Métodos: getLineExpression(), getBeginColumnExpression() e
getEndColumnExpression().
8
Principais Mudanças LE1
Classe: Expressao
9
Principais Mudanças LE1O restante das classes como: Valor, ValorString, ValorInteiro,
ValorBooleano, ValorConcreto, Programa tiveram mudanças semelhantes às classes anteriores.
O Expressoes.jj tiveram os construtores das classes alteradas para o novo formato com os tokens no campo de texto.
10
Principais Mudanças LE1
PExpMenos() antes da alteração
11
Principais Mudanças LE2Mesmas alterações da LE1 e mais algumas(ambiente):
Classe: ExpDeclaracao
checaTipo: – acrescentamos o lançamento de VisitorException.
resolveTypeBindings: – acrescentamos o lançamento de VisitorException.
checkTypeBindings: – acrescentamos o lançamento de VisitorException.
12
Principais Mudanças LE2
Classe: ID, IfThenElseimplements foi mudado para extends pois, ID não é mais uma interface, e sim uma classe abstrata.
Construtor: – Adicionado um novo construtor que recebe os valores do
posicionamento do token no componente de texto. public ID (String strName, int line, int beginColumn, int endColumn)
Adição do método public void accept(LinguagemVisitor lingVisitor, AmbienteCompilacao ambiente) throws VisitorException.
13
Principais Mudanças LE2
Classe: IDpublic boolean checaTipo(AmbienteCompilacao amb)
throws VariavelNaoDeclaradaException, VisitorException {boolean result = true;try {
amb.get(this); // se estiver no ambiente, entao esta ok.} catch (VariavelNaoDeclaradaException exc) {
accept(visit, amb);throw exc;
} return result;
}
14
Principais Mudanças LE2Classe: ExpDeclaracao
private Map<Id, Tipo> resolveTypeBindings(AmbienteCompilacao ambiente)throws VariavelNaoDeclaradaException,
VariavelJaDeclaradaException, VisitorException {
Map<Id, Tipo> resolvedTypes = new HashMap<Id, Tipo>();
for (DecVariavel declaration : this.seqdecVariavel) {if (resolvedTypes.put(declaration.getId(),
declaration.getExpressao().getTipo(ambiente)) != null) {declaration.getId().accept(visit, ambiente);throw new VariavelJaDeclaradaException(declaration.getId());
}
}
return resolvedTypes;}
15
Principais Mudanças LF1Mesma alterações do LE2 com algumas mudanças a mais.
Classe: DecFuncao, DeclaracaoFuncional, DecVariavel e Aplicacao
checaTipo() e getTipo() agora lançam exceção VisitorException.
implements foi mudado por extends pois a classe Expressao não é mais uma interface
Classe: Aplicacao
16
Principais Mudanças LI1Utiliza as alterações feitas na LE2 com algumas mudanças a mais.
Classe: IfThenElse, While, Atribuicao
checaTipo() e getTipo() agora lançam exceção VisitorException.
Deixou de ser uma interface e virou uma classe abstrata para receber uma instancia do LinguagemVisitor
Classe: Comando
17
Principais Mudanças LI1
Classe: IfThenElse
18
Principais Mudanças LI1
Classe: While
19
Dificuldades• Pouca possibilidade de mudanças sem afetar outras
linguagens.• Mudança de Expressao para classe abstrata• Herança múltipla causada pela alteração das interfaces para
classes abstratas em LF2.• Na LF3 tem alguns erros de implementação, por exemplo, ela
importa classes da LF2, mas elas estão implementadas também na LF3
20
Demonstração
Pilha
let var x = "a" inlet var y = 2 in y+x
21
Demonstração
XSTRING
Pilha
let var x = "a" inlet var y = 2 in y+x
22
Demonstração
let var x = "a" inlet var y = 2 in y+x
XSTRING
Y INTEIRO
Pilha
23
Demonstração
XSTRING
Y INTEIRO
Pilha
let var x = "a" inlet var y = 2 in y+x
24
Demonstração
XSTRING
Y INTEIRO
Pilha
let var x = "a" inlet var y = 2 in y+x
ExpSoma.java
25
Demonstração
XSTRING
Y INTEIRO
Pilha
let var x = "a" inlet var y = 2 in y+x
ExpSoma.java
26
Demonstração
XSTRING
Y INTEIRO
Pilha
let var x = "a" inlet var y = 2 in y+x
ExpSoma.java
27
DemonstraçãoExpBinaria.java
XSTRING
Y INTEIRO
Pilha
let var x = "a" inlet var y = 2 in y+x
28
DemonstraçãoVisitor.java
let var x = "a" inlet var y = 2 in y+x
XSTRING
Y INTEIRO
Pilha
29
DemonstraçãoVisitor.java
let var x = "a" inlet var y = 2 in y+x
XSTRING
Y INTEIRO
Pilha
lenght("a" + true)
30
DemonstraçãoVisitor.java
let var x = "a" inlet var y = 2 in y+x
XSTRING
Y INTEIRO
Pilha
31
Telas
32
TelasErro de tipo Variável não declarada
Variável já declarada Sem erro (x em outro escopo)
33
Telas
Variável não declarada
Erro de tipo (if)
Erro de tipo (dentro while)
34
Trabalhos FuturosImplementar as funcionalidades de seleção de erro para LF2, LF3,
LI2 e OO1.
35
Obrigado!
Dúvidas?