técnicas de io em lf1/lf2 diego martins, laís xavier, paulo martinelli e turah xavier
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
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 intsoma 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
• http://www.haskell.org/tutorial/io.html • http://en.wikipedia.org/wiki/Monads_in_functiona
l_programming• http://citeseer.ist.psu.edu/peytonjones93imperati
ve.html
• http://myweb.lsbu.ac.uk/~abdallae/units/fp/iomonads.pdf
• http://www.cs.nott.ac.uk/~wss/Teaching/FunIO.pdf