140 likes | 204 Views
Sobrecarga e Declaração de Operadores Rafael Fonseca (rjcf@cin.ufpe.br) Romeu Guimarães (rag@cin.ufpe.br). Linguagem OperOR http://operor.googlecode.com. Agenda. Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades Referências.
E N D
Sobrecarga e Declaração de OperadoresRafael Fonseca (rjcf@cin.ufpe.br) Romeu Guimarães (rag@cin.ufpe.br) Linguagem OperOR http://operor.googlecode.com
Agenda • Descrição da Linguagem • Funcionalidades • BNF • Limitações e Dificuldades • Desenvolvimento • Exemplos • Dificuldades • Referências
Descrição da Linguagem • A linguagem OperOR é uma linguagem funcional baseada na linguagem Funcional 2. • Tem como objetivo principal permitir a criação de operadores N-ários, pré-fixos e infixos.
Descrição da Linguagem – Funcionalidades • Declaração de novos operadores; • Sobrecarga de operadores existentes; • Aplicação parcial de operadores; * • Operadores de alta ordem. * * Funcionalidades adicionadas
Aplicação Parcial - Compilação Ambiente de compilação _ + _ :Programa OK! _ + _ Se existe no ambiente, então tudo bem!
Aplicação Parcial – Execução Ambiente de execução Operador Genérico _ + _ :Programa ? + ? INT + INT INT + BOL STR + STR Verifica qual a definição mais recente para determinados tipos que serão usados como parâmetro do operador.
Descrição da Linguagem – BNF Programa ::= ExpressaoExpressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElseValor ::= ValorConcreto | ValorAbstratoValorAbstrato::= ValorFuncaoValorConcreto ::= ValorInteiro | ValorBooleano | ValorStringTipo ::= TipoInteiro | TipoString | TipoBooleano | TipoFuncaoValorFuncao ::= "fn" ListaId "." ExpressaoExpUnaria ::= IdOperadorExpressao | ExpressaoExpBinaria ::= ExpUnaria( IdOperadorExpUnaria | “(” ListExp “)” )*ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao
Descrição da Linguagem – BNF DeclaracaoFuncional ::= DecVariavel | DecFuncao | DecOperador | DeclaracaoFuncional "," DeclaracaoFuncionalDecVariavel ::= "var" Id "=" ExpressaoDecFuncao ::= "fun" ListId "=" ExpressaoDecOperador ::= "op" ListIdOperador "on" ListId "=" ExpressaoListIdOperador ::= ( IdOperador "_:" Tipo [ IdOperador ] | "_:" Tipo IdOperador [ "_:" Tipo ] )+ListId ::= Id | Id, ListIdAplicacao ::= Expressao "(" ListExp ")"ListExp ::= Expressao | Expressao "," ListExp
Limitações e Dificuldades • Não é permitida a declaração de operadores recursivos; • Não é permitido o uso de operadores pós-fixos; • Na declaração de um operador não é possível a declaração de um operando sem tipo. Logo, não é possível declarar um operador identidade genérico.
Limitações e Dificuldades • Para diferenciar a aplicação de um dado operador de outro é necessário o uso de parênteses. • Exemplos:
Limitações e Dificuldades • Reconhecimento da aplicação de operadores. • Dificuldade na retirada da recursão de operadores.
Referências • http://www-cse.ucsd.edu/~goguen/sys/obj.html The OBJ Language Family • http://www.ldl.jaist.ac.jp/cafeobj/
Sobrecarga e Declaração de OperadoresRafael Fonseca (rjcf@cin.ufpe.br) Romeu Guimarães (rag@cin.ufpe.br) Linguagem OperOR http://operor.googlecode.com