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

Slides:



Advertisements
Apresentações semelhantes
Tipos Explícitos e Tipos Polimórficos para LF1
Advertisements

Classes Abstratas e Interfaces
Java - Interfaces Prof. Msc. Flávio Viotti.
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Programação Básica em Java
Classes Concretas e Abstratas
Animador para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Lucena.
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
Wagner Santos C. de Jesus
Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães.
Linguagem OperOR Agenda Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades.
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Implementar Listas em Linguagem Funcional II
Departamento de Estatística e Informática
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Padrão de Projeto Visitor
Métodos de Construção de Software: Orientação a Objetos
Introdução à Programação Orientada a Objetos com Java
Classes, Objetos, Atributos e Métodos JAVA
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
Projeto PLP Persistência em OO1 Equipe: Ana Paula Cavalcanti Clelio Feitosa Zildomar Felix Professor: Augusto Sampaio.
Pilhas Profa. Nádia Félix.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Linguagem II Exceções.
Listas Simplesmente Encadeadas
Tratamento de Exceções
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Introdução às Java Threads
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Classes Abstratas e Interface
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
SableCC Shirley Silva e Jobson Jeronimo Centro de Informática – CIn Universidade Federal de Pernambuco – UFPE
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Modificadores Programação II.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
PLP – Paradigma de Linguagens de Programação
Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier.
Concorrência em LF1 Paradigmas de Linguagens de Programação 20 de junho de 2006 Aline Timóteo Carlos Rodrigues Flávia Falcão Tiago Rolim.
Adriana Carla Projeto de PLP. 2 Roteiro Objetivos Alterações  Contextualização  BNF / Parser  checaTipo()  avaliar() Demonstração.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Conceitos de OO em Java Parte I
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Projeto II - PLP Prof. Augusto Sampaio
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
Paradigmas de Linguagens de Programação BNF e Interpretador da Linguagem Orientada a Objetos Augusto Sampaio e Paulo Borba Gustavo Pinto Marcelo Queiroz.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Felipe Nunes Flores – Programa de Educação Tutorial.
1. 2 Programação Orientada a Objetos Prof. Maurício Rodrigues de Morais
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Jean Carlo mendes
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

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 , pelos alunos: Namedin Teles e Rafael Lucena Objetivos Específicos Seleção do erro; Sintaxe highlight; 2

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

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

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

Principais Mudanças LE1 6 Classes: ExpBinaria e ExpUnaria

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

Principais Mudanças LE1 8 Classe: Expressao

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.

Principais Mudanças LE1 10 PExpMenos() antes da alteração

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.

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.

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

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

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

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

Principais Mudanças LI1 17 Classe: IfThenElse

Principais Mudanças LI1 18 Classe: While

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

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

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

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

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

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

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

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

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

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

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

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

Telas 31

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

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

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

Obrigado! 35 Dúvidas?