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

Post on 08-Jan-2016

24 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

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!

top related