Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouYago Casimiro Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.