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
![Page 1: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/1.jpg)
Técnicas de IO em LF1/LF2
Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier
![Page 2: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/2.jpg)
Roteiro
• Escopo• Objetivos da 1ª parte• Alterações na BNF• Alterações nas classes• Funcionando!• Referências
![Page 3: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/3.jpg)
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.
![Page 4: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/4.jpg)
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
![Page 5: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/5.jpg)
Alterações na BNF (1/3)
ExpUnaria ::= ExpMenos
| ExpNot
| ExpLength
| ExpDeclaracao
| ExpCondicional
| Aplicacao
| ExpPrimaria
| ExpAcaoPatternBound
![Page 6: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/6.jpg)
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
![Page 7: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/7.jpg)
EspecTipoComposto ::= EspecTipoPrimitivo | EspecTipoIO
EspecTipoPrimitivo ::= "int" | "boolean"
| “string“
EspecTipoIO ::= "IO" EspecTipoPrimitivo | "IO" "(" ")"
Alterações na BNF (3/3)
![Page 8: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/8.jpg)
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
![Page 9: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/9.jpg)
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)
![Page 10: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/10.jpg)
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
![Page 11: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/11.jpg)
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.
![Page 12: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/12.jpg)
Funcionando!
![Page 13: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier](https://reader035.vdocuments.pub/reader035/viewer/2022062723/56813f92550346895daa8135/html5/thumbnails/13.jpg)
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