130 likes | 222 Views
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.
E N D
Técnicas de IO em LF1/LF2Diego 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
Alterações na BNF (3/3) EspecTipoComposto ::= EspecTipoPrimitivo | EspecTipoIO EspecTipoPrimitivo ::= "int" | "boolean" | “string“ EspecTipoIO ::= "IO" EspecTipoPrimitivo | "IO" "(" ")"
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.
Referências • http://www.haskell.org/tutorial/io.html • http://en.wikipedia.org/wiki/Monads_in_functional_programming • http://citeseer.ist.psu.edu/peytonjones93imperative.html • http://myweb.lsbu.ac.uk/~abdallae/units/fp/iomonads.pdf • http://www.cs.nott.ac.uk/~wss/Teaching/FunIO.pdf