sobrecarga e declaração de operadores rafael fonseca e romeu guimarães

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

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


1 download

TRANSCRIPT

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

Sobrecarga e Declaração de Operadores

Rafael Fonseca e Romeu Guimarães

Page 2: 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

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

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

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

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.

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

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 + 1 Reconhecido como uma aplicação do operador ternário _:int + _:int + _:int

(1 + 1) + 1 Reconhecido como duas aplicações do operador binário _:int + _:int

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

• 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

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

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

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

Desenvolvimento

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

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

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

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

Exemplo

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

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.

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

Referências

• http://www-cse.ucsd.edu/~goguen/sys/obj.html The OBJ Language Family

• http://www.ldl.jaist.ac.jp/cafeobj/

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

Sobrecarga e Declaração de Operadores

Rafael Fonseca e Romeu Guimarães