1 / 35

Melhorias e Mensagens Amigáveis ao Usuário

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

eve-moses
Download Presentation

Melhorias e Mensagens Amigáveis ao Usuário

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • ObjetivoGeral • Implantar melhorias no editor utilizado no ensino da disciplina PLP, aproveitando o projeto desenvolvido em 2009.1, pelos alunos: Namedin Teles e Rafael Lucena • ObjetivosEspecí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. Expressaoagora é 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 publicvoidaccept(LinguagemVisitor) throwsVisitorException

  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 LE1 O restante das classes como: Valor, ValorString, ValorInteiro, ValorBooleano, ValorConcreto, Programa tiveram mudanças semelhantes às classes anteriores. O Expressoes.jjtiveram 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 LE2 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 Classe: ID, IfThenElse implementsfoi mudado para extendspois, IDnã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: ID publicbooleanchecaTipo(AmbienteCompilacaoamb) throwsVariavelNaoDeclaradaException, VisitorException { booleanresult = true; try { amb.get(this); // se estiver no ambiente, entao esta ok. } catch (VariavelNaoDeclaradaExceptionexc) { accept(visit, amb); throwexc; } returnresult; }

  14. Principais Mudanças LE2 Classe: ExpDeclaracao privateMap<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 LF1 Classe: Aplicacao 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. implementsfoi mudado por extends pois a classe Expressao não é mais uma interface

  16. Principais Mudanças LI1 Classe: Comando 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 interfacee virou uma classe abstrata para receber uma instancia do LinguagemVisitor

  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 Expressaopara 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" in let var y = 2 in y+x

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

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

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

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

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

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

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

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

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

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

  31. Telas

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

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

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

  35. Obrigado! Dúvidas?

More Related