Linguagem OperOR
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 _ + _ Programa _ + _ OK! Ambiente de compilação Se existe no ambiente, então tudo bem!
Aplicação Parcial – Execução ? + ? Programa _ + _ Ambiente de execução INT + INT INT + BOL STR + STR Operador Genérico 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 ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato::= ValorFuncao ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString Tipo ::= TipoInteiro | TipoString | TipoBooleano | TipoFuncao ValorFuncao ::= "fn" ListaId "." Expressao ExpUnaria ::= IdOperador Expressao | Expressao ExpBinaria ::= ExpUnaria ( IdOperador ExpUnaria | ( ListExp ) )* ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao
Descrição da Linguagem – BNF DeclaracaoFuncional ::= DecVariavel | DecFuncao | DecOperador | DeclaracaoFuncional "," DeclaracaoFuncional DecVariavel ::= "var" Id "=" Expressao DecFuncao ::= "fun" ListId "=" Expressao DecOperador ::= "op" ListIdOperador "on" ListId "=" Expressao ListIdOperador ::= ( IdOperador "_:" Tipo [ IdOperador ] | "_:" Tipo IdOperador [ "_:" Tipo ] )+ ListId ::= Id | Id, ListId Aplicacao ::= 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.
Para diferenciar a aplicação de um dado operador de outro é necessário o uso de parênteses. 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 Limitações e Dificuldades
Reconhecimento da aplicação de operadores. Dificuldade na retirada da recursão de operadores. Limitações e Dificuldades
Exemplos
Referências The OBJ Language Family
Linguagem OperOR