Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães.

Slides:



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

Software Básico Silvio Fernandes
Cleanroom - Software Engineering
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
Recursividade Prof. Alex F. V. Machado
Algoritmos e Estrutura de Dados I
JavaCC e JJTree Geração de compiladores implementados em Java
Sobrecarga de Operadores
Rafael Pinto Frederico Corrêa
Introdução ao paradigma de programação: Orientado a Objetos
Disciplina: AAM Profa. Ana Watanabe 03/13 vol.2
Construção de Compiladores
Centro Integrado de Tecnologia da Informação
Linguagem OperOR Agenda Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades.
Implementar Listas em Linguagem Funcional II
Informática Teórica Engenharia da Computação
Aula prática - análise contextual
Conceitos básicos de orientação a objetos
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.
Compiladores, Aula Nº 5 João M. P. Cardoso
Programação Orientada à Objetos
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Estudo dos Conceitos e Paradigmas de Programação
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Expressões e Instrução de Atribuição
Análises léxica e sintática
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Paradigma Funcional Apresentação de LF1.
Augusto Sampaio e Paulo Borba Centro de Informática
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Projeto de PLP Resultado Final Guilherme Oliveira Everton Marques
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
Professor: Márcio Amador
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Analise sintática aula-07-analise-sintática.pdf.
Paradigma funcional.
Análises léxica e sintática
Aula prática 14 Orientação a Objetos – C++ Parte 2
Analisador Léxico Prof. Alexandre Monteiro
Análise Sintática Prof. Alexandre Monteiro
Equipe: Osias Carneiro, Anderson Soares, André Araújo
Análise Léxica Prof. Alexandre Monteiro
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Construtores e Destrutores
Recursividade Profs. De Prog2 e Lab2.
Linguagem C.
Geradores de analisadores léxicos
PLP – Paradigma de Linguagens de Programação
OO com Java Luiz Carlos d´Oleron Roteiro de aula.
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.
Linguagem Funcional 2 Equipe: Gustavo Cabral Leonardo Maici Professor: Augusto
JavaCC.
Sintaxe de uma Linguagem
Projeto II - PLP Prof. Augusto Sampaio
PLP – JavaCC Java Compiler Compiler
Padrão Visitor Paulo Mauricio Gonçalves Jr Rodrigo Teixeira Ramos Paradigmas de Linguagens de Programação Prof. Augusto Sampaio Julho de 2003.
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
Programação Computacional Profa. Madeleine Medrano
Diagrama de Classes Herança Dependências.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Estrutura de Dados Prof. André Cypriano M. Costa
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Mobilidade para Linguagem Orientada a Objetos 1
Transcrição da apresentação:

Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães

Roteiro BNF (Principais Mudanças) Limitações Dificuldades Desenvolvimento Exemplos Trabalhos Futuros Referências

BNF (Principais Mudanças) Expressao ::= [ IdOperador ] ( Valor | ExpDeclaracao | IdFuncaoVariavel | Aplicacao | IfThenElse | "(" Expressao ")" ) [ ComplementoOperacao ] ComplementoOperacao ::= ( IdOperador "(" Expressao ")" | IdOperador Expressao | IdOperador ) ListIdOperador ::= ( IdOperador "_:" Tipo [ IdOperador ] | "_:" Tipo IdOperador [ "_:" Tipo ] )+ DecOperador ::= "op" ListIdOperador "on" ListIdFuncaoVariavel "=" Expressao

Limitações Não aceita tipos polimórficos nem ValorFuncao como parâmetros para operadores. Estas restrições não a deixam 100% compatível com a linguagem LF2. Pois quando queremos usar o conceito de uma função como valor não podemos.

Limitações Para conseguir diferenciar o uso de operador (que pode ser binário, ternário e etc) temos que usar os tokens "(" e ")". Assim podemos diferenciar quando está sendo usado um determinado operador. Exemplos: Reconhecido como uma aplicação do operador ternário _:int + _:int + _:int (1 + 1) + 1Reconhecido como duas aplicações do operador binário _:int + _:int

Encontramos algumas dificuldades no desenvolvimento da primeira versão da OperOR. Algumas delas estão listadas abaixo: Replicação de muitas classes da LF2 para mudança de tipos, pois davam conflitos. Encontrar uma maneira de reconhecer a aplicação de operadores. Ter que modificar o funcionamento quase que completo do parser da LF2. Pois agora tinha que reconhecer onde estavam sendo aplicados os operadores. Dificuldades

Desenvolvimento Nesta sessão descreveremos como foi o desenvolvimento da linguagem. Classes Reusadas –Da linguagem funcional 2 (LF2): plp.functional1.declaration.DeclaracaoFuncional plp.functional1.declaration.DecVariavel plp.functional1.expression.IfThenElse –Da Linguagem de Expressões 2 (LE2): plp.expressions2.expression.Expressao plp.expressions2.expression.Valor plp.expressions2.expression.ValorInteiro plp.expressions2.expression.ValorString plp.expressions2.expression.ValorBooleano

Desenvolvimento Classes Modificadas plp.operor.declaration.DecFuncao plp.operor.expression.Aplicacao plp.operor.expression.ExpDeclaracao plp.operor.expression.ValorFuncao plp.operor.util.PartialInstantiatorVisitor

Desenvolvimento Classes Criadas –plp.operor.expression.ValorOperador –plp.operor.expression.Operacao –plp.operor.expression.IdOperador –plp.operor.expression.IdFuncaoVariavel –plp.operor.expression.Aplicacao –plp.operor.declaration.DecOperador –plp.operor.util.ListIdOperador –plp.operor.util.TipoOperador

Exemplo

Trabalhos Futuros Os seguintes trabalhos podem ser desenvolvidos a partir da implementação atual da OperOR: –Estudar uma forma de implementar o funcionamento de operadores de alta ordem. –Implementar uma forma de se definir operadores envolvendo tipos polimorficos. –Estudar como poderia ser implementado o conceito de precedência de operadores. –Implementar recursão de operadores e usar o token "extern" para usar um operador declarado anteriormente. Um código de exemplo seria o listado a seguir, onde o operador de soma que está sendo usado dentro da declaração de operador é um outro operador de soma previamente declarado.

Referências The OBJ Language Familyhttp://www-cse.ucsd.edu/~goguen/sys/obj.html

Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães