Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier
Roteiro Escopo Objetivos da 1ª parte Alterações na BNF Alterações nas classes Funcionando! Referências
Escopo Inserção de componentes e tipos básicos para suporte de Monads nas linguagens funcionais LF1 e LF2. Dar suporte a funções de entrada e saída como: getChar, putChar, getString. Dar suporte a funções de entrada e saída para manipulações de arquivos.
Objetivos na 1ª parte Inserção da definição de tipos nas declarações das funções. Inserção de um tipo IO, que encapsula outros tipos primitivos como int, string, boolean (Monads) Criação de um "prelude" similar ao de haskell para que o parser reconheça as chamadas de funções padrão tais como: getChar, getInt, getBoolean, getString. *em LF1
Alterações na BNF (1/3) ExpUnaria ::= ExpMenos | ExpNot | ExpLength | ExpDeclaracao | ExpCondicional | Aplicacao | ExpPrimaria | ExpAcaoPatternBound
Alterações na BNF (2/3) ExpAcaoPatternBound ::= "do" ListaPatternBound "\n" Expressao ListaPatternBound ::= ExpPatternBound | ExpPatternBound "," ListaPatternBound ExpPatternBound ::= Id "<-" Expressao DeclFuncao ::= "fun" Id ":" ListaTiposParam "\n" Id ListaId "=" Expressao ListaTiposParam ::= EspecTipoComposto | EspecTipoComposto " " ListaTiposParam
EspecTipoComposto ::= EspecTipoPrimitivo | EspecTipoIO EspecTipoPrimitivo ::= "int" | "boolean" | “string“ EspecTipoIO ::= "IO" EspecTipoPrimitivo | "IO" "(" ")" Alterações na BNF (3/3)
Declaração de Função Antes: DecFuncao ::= "fun" ListId "=" Expressao Ex: fun soma x y = x + y Depois: DeclFuncao ::= "fun" Id ":" ListaTiposParam "\n" Id ListaId "=" Expressao Ex: fun soma : int int int soma x y = x + y
Alterações nas classes - BNF Classes modificadas –Tipo Introdução do tipo IO na enumeração –DecFuncao Introdução do objeto EspecTipoFuncao Modificação da função checaTipo (aridade e tipos de parâmetros) Modificação da função getTipo (retirando checagem automática de tipos) –Aplicacao Modificação da função checkArgumentTypes (utilizada pelo checaTipo)
Alterações nas classes - BNF Classes criadas –EspecTipoBooleano –EspecTipoComposto –EspecTipoFuncao –EspecTipoInteiro –EspecTipoIO –EspecTipoPrimitivo –EspecTipoString –EspecTipoVoid –ExpPatternBound –ExpAcaoPatternBound ExpAcaoPatternBound ::= "do" ListaPatternBound "\n" Expressao ListaPatternBound ::= ExpPatternBound | ExpPatternBound "," ListaPatternBound –ValorIO
Alterações nas classes – “Prelude” As classes ContextoCompilacao e AmbienteExecucaoFuncional foram alteradas para que as funções de getN sejam reconhecidas em tempo de compilação e execução.
Funcionando!
Referências l_programminghttp://en.wikipedia.org/wiki/Monads_in_functiona l_programming ve.htmlhttp://citeseer.ist.psu.edu/peytonjones93imperati ve.html ads.pdfhttp://myweb.lsbu.ac.uk/~abdallae/units/fp/iomon ads.pdf dfhttp:// df