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

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

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

Apresentações semelhantes


Apresentação em tema: "Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães."— Transcrição da apresentação:

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

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

3 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

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

5 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: 1 + 1 + 1Reconhecido como uma aplicação do operador ternário _:int + _:int + _:int (1 + 1) + 1Reconhecido como duas aplicações do operador binário _:int + _:int

6 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

7 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

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

9 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

10 Exemplo

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

12 Referências http://www-cse.ucsd.edu/~goguen/sys/obj.html The OBJ Language Familyhttp://www-cse.ucsd.edu/~goguen/sys/obj.html http://www.ldl.jaist.ac.jp/cafeobj/

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


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

Apresentações semelhantes


Anúncios Google