melhorias e mensagens amigáveis ao usuário

35
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos

Upload: eve-moses

Post on 31-Dec-2015

20 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: Melhorias e Mensagens Amigáveis ao Usuário

Melhorias e Mensagens Amigáveis ao Usuário

Centro de InformáticaUniversidade Federal de Pernambuco

Bruno FelipeMarco AndréPaulo FernandoRodolfo Santos

Page 2: Melhorias e Mensagens Amigáveis ao Usuário

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;

Page 3: Melhorias e Mensagens Amigáveis ao Usuário

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.

Page 4: Melhorias e Mensagens Amigáveis ao Usuário

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).

Page 5: Melhorias e Mensagens Amigáveis ao Usuário

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

Page 6: Melhorias e Mensagens Amigáveis ao Usuário

6

Principais Mudanças LE1

Classes: ExpBinaria e ExpUnaria

Page 7: Melhorias e Mensagens Amigáveis ao Usuário

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().

Page 8: Melhorias e Mensagens Amigáveis ao Usuário

8

Principais Mudanças LE1

Classe: Expressao

Page 9: Melhorias e Mensagens Amigáveis ao Usuário

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.

Page 10: Melhorias e Mensagens Amigáveis ao Usuário

10

Principais Mudanças LE1

PExpMenos() antes da alteração

Page 11: Melhorias e Mensagens Amigáveis ao Usuário

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.

Page 12: Melhorias e Mensagens Amigáveis ao Usuário

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.

Page 13: Melhorias e Mensagens Amigáveis ao Usuário

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;

}

Page 14: Melhorias e Mensagens Amigáveis ao Usuário

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;}

Page 15: Melhorias e Mensagens Amigáveis ao Usuário

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

Page 16: Melhorias e Mensagens Amigáveis ao Usuário

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

Page 17: Melhorias e Mensagens Amigáveis ao Usuário

17

Principais Mudanças LI1

Classe: IfThenElse

Page 18: Melhorias e Mensagens Amigáveis ao Usuário

18

Principais Mudanças LI1

Classe: While

Page 19: Melhorias e Mensagens Amigáveis ao Usuário

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

Page 20: Melhorias e Mensagens Amigáveis ao Usuário

20

Demonstração

Pilha

let var x = "a" inlet var y = 2 in y+x

Page 21: Melhorias e Mensagens Amigáveis ao Usuário

21

Demonstração

XSTRING

Pilha

let var x = "a" inlet var y = 2 in y+x

Page 22: Melhorias e Mensagens Amigáveis ao Usuário

22

Demonstração

let var x = "a" inlet var y = 2 in y+x

XSTRING

Y INTEIRO

Pilha

Page 23: Melhorias e Mensagens Amigáveis ao Usuário

23

Demonstração

XSTRING

Y INTEIRO

Pilha

let var x = "a" inlet var y = 2 in y+x

Page 24: Melhorias e Mensagens Amigáveis ao Usuário

24

Demonstração

XSTRING

Y INTEIRO

Pilha

let var x = "a" inlet var y = 2 in y+x

ExpSoma.java

Page 25: Melhorias e Mensagens Amigáveis ao Usuário

25

Demonstração

XSTRING

Y INTEIRO

Pilha

let var x = "a" inlet var y = 2 in y+x

ExpSoma.java

Page 26: Melhorias e Mensagens Amigáveis ao Usuário

26

Demonstração

XSTRING

Y INTEIRO

Pilha

let var x = "a" inlet var y = 2 in y+x

ExpSoma.java

Page 27: Melhorias e Mensagens Amigáveis ao Usuário

27

DemonstraçãoExpBinaria.java

XSTRING

Y INTEIRO

Pilha

let var x = "a" inlet var y = 2 in y+x

Page 28: Melhorias e Mensagens Amigáveis ao Usuário

28

DemonstraçãoVisitor.java

let var x = "a" inlet var y = 2 in y+x

XSTRING

Y INTEIRO

Pilha

Page 29: Melhorias e Mensagens Amigáveis ao Usuário

29

DemonstraçãoVisitor.java

let var x = "a" inlet var y = 2 in y+x

XSTRING

Y INTEIRO

Pilha

lenght("a" + true)

Page 30: Melhorias e Mensagens Amigáveis ao Usuário

30

DemonstraçãoVisitor.java

let var x = "a" inlet var y = 2 in y+x

XSTRING

Y INTEIRO

Pilha

Page 31: Melhorias e Mensagens Amigáveis ao Usuário

31

Telas

Page 32: Melhorias e Mensagens Amigáveis ao Usuário

32

TelasErro de tipo Variável não declarada

Variável já declarada Sem erro (x em outro escopo)

Page 33: Melhorias e Mensagens Amigáveis ao Usuário

33

Telas

Variável não declarada

Erro de tipo (if)

Erro de tipo (dentro while)

Page 34: Melhorias e Mensagens Amigáveis ao Usuário

34

Trabalhos FuturosImplementar as funcionalidades de seleção de erro para LF2, LF3,

LI2 e OO1.

Page 35: Melhorias e Mensagens Amigáveis ao Usuário

35

Obrigado!

Dúvidas?