A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos."— Transcrição da apresentação:

1 Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo 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; 2

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

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

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 5

6 Principais Mudanças LE1 6 Classes: ExpBinaria e ExpUnaria

7 Principais Mudanças LE1 7 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 8 Classe: Expressao

9 Principais Mudanças LE1 9 O 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 10 PExpMenos() antes da alteração

11 Principais Mudanças LE2 11 Mesmas 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 12 Classe: ID, IfThenElse implements 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 13 Classe: ID public 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 LE2 14 Classe: ExpDeclaracao private Map resolveTypeBindings(AmbienteCompilacao ambiente) throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException, VisitorException { Map resolvedTypes = new HashMap (); 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 LF1 15 Mesma 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 LI1 16 Utiliza 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 17 Classe: IfThenElse

18 Principais Mudanças LI1 18 Classe: While

19 Dificuldades 19 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 20 Pilha let var x = "a" in let var y = 2 in y+x

21 Demonstração 21 XSTRING Pilha let var x = "a" in let var y = 2 in y+x

22 Demonstração 22 let var x = "a" in let var y = 2 in y+x XSTRING Y INTEIRO Pilha

23 Demonstração 23 XSTRING Y INTEIRO Pilha let var x = "a" in let var y = 2 in y+x

24 Demonstração 24 XSTRING Y INTEIRO Pilha let var x = "a" in let var y = 2 in y+x ExpSoma.java

25 Demonstração 25 XSTRING Y INTEIRO Pilha let var x = "a" in let var y = 2 in y+x ExpSoma.java

26 Demonstração 26 XSTRING Y INTEIRO Pilha let var x = "a" in let var y = 2 in y+x ExpSoma.java

27 Demonstração 27 ExpBinaria.java XSTRING Y INTEIRO Pilha let var x = "a" in let var y = 2 in y+x

28 Demonstração 28 Visitor.java let var x = "a" in let var y = 2 in y+x XSTRING Y INTEIRO Pilha

29 Demonstração 29 Visitor.java let var x = "a" in let var y = 2 in y+x XSTRING Y INTEIRO Pilha lenght("a" + true)

30 Demonstração 30 Visitor.java let var x = "a" in let var y = 2 in y+x XSTRING Y INTEIRO Pilha

31 Telas 31

32 Telas 32 Erro de tipoVariável não declarada Variável já declarada Sem erro (x em outro escopo)

33 Telas 33 Variável não declarada Erro de tipo (if) Erro de tipo (dentro while)

34 Trabalhos Futuros 34 Implementar as funcionalidades de seleção de erro para LF2, LF3, LI2 e OO1.

35 Obrigado! 35 Dúvidas?


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

Apresentações semelhantes


Anúncios Google