técnicas de io em lf1/lf2 diego martins, laís xavier, paulo martinelli e turah xavier

13
Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier

Upload: brandi

Post on 08-Jan-2016

24 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Técnicas de IO em LF1/LF2 Diego Martins, Laís Xavier, Paulo Martinelli e Turah Xavier

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

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

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

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

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

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

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

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

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

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

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

Funcionando!