Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti.

Post on 19-Apr-2015

102 views 0 download

Transcript of Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti.

Resultado FinalResultado Final

Projeto de PLP

Guilherme OliveiraEverton Marques

Ricardo Cavalcanti

ObjetivosObjetivos

Corrigir algumas falhas remanescentes da Linguagem Funcional 2

Listas – Cons: e : L– Concatenação: L1^^L2– Operações: head(L) e tail(L)

• Compreensão de Lista– [exp | qualificador,...,qualificador],

• exp é uma expressão • qualificador é uma condição ou um gerador da

forma x lista

Resultados AnterioresResultados Anteriores

Bugs conhecidos das linguagens LF1 e LF2 foram corrigidos e alguns trechos de código foram reescritos para melhorar a compreenção.

Listas (Criação da LF3)– Cons: e : L– Concatenação: L1^^L2– Operações: head(L) e tail(L)

Resultados da 2ª iteraçãoResultados da 2ª iteração

• Corrigindo bug do seguinte tipo:• let var suc = fn x . x+1,

var pred = fn x . x-1,var id = fn x . x in suc(pred(2)) == id(2)

• Correção feita no parser

Resultados da 2ª iteraçãoResultados da 2ª iteração

• Inclusão das expressões binárias maiorQue(>),menorQue(<), multi (*).

• O checaTipo delas exige que as duas expressões sejam inteiras quando avaliadas.

• Criadas para ajudar na utilização de compreensão de lista

Resultados da 2ª iteraçãoResultados da 2ª iteração

• Inclusão de “..” como um operador binário que recebe duas Expressões e retorna uma lista.

• O checaTipo dele exige que as duas expressões sejam inteiras quando avaliadas.

• Exemplo: 1..5 vai resultar [1,2,3,4,5];

Resultados da 2ª iteraçãoResultados da 2ª iteração

• Compreensão de Lista– [exp g, ..., g f],

• exp é uma expressão • g é um gerador da forma x lista • f é um filtro

• Nova Expressão CompreensaoLista que é criada a partir de uma Expressão, uma lista de geradores e um filtro (expressão booleana). Um gerador é composto de um id e uma lista.

Resultados da 2ª iteraçãoResultados da 2ª iteração

• Durante a execução o id utilizado no gerador vai virar uma variável no ambiente.  As variáveis dos geradores podem ser utilizadas na expressão inicial,  e no filtro.

• A expressão inicial serve pra gerar a lista em si, o gerador diz de onde cada variável vem, e o filtro diz se a variável deve ser inclusa.

Resultados da 2ª iteraçãoResultados da 2ª iteração

• O checaTipo da CompreensaoLista verifica se o tipo interno da lista utilizada no gerador é igual ao tipo do id usado no gerador, baseado na expressão utilizada na lista.Verifica se a expressão é bem formada, e se o filtro é booleano.

• Pra avaliar a compreensão da lista, as possíveis combinações (múltiplos geradores) é gerada RECURSIVAMENTE, incrementando o ambiente e inserindo as constantes no ambiente.

Resultados da 2ª iteraçãoResultados da 2ª iteração

• Exemplo:• [ [x,y] for x in [1,2,3] for y in [4,5,6] ]• Resultado: [[1,4],[1,5],[1,6],[2,4],[2,5],

[2,6],[3,4],[3,5],[3,6]]

BNF da LF3 BNF da LF3

Programa ::= ExpressaoExpressao ::= Valor | ExpUnaria

| ExpBinaria| ExpDeclaracao| Id| Aplicacao| IfThenElse

Valor ::= ValorConcreto | ValorAbstratoValorAbstrato ::= ValorFuncaoValorConcreto ::= ValorInteiro | ValorBooleano | ValorStringValorFuncao ::= "fn" Id Id "." Expressao

BNF da LF3BNF da LF3

ExpUnaria ::= "-" Expressao | "not" Expressao

| "length" Expressao| "head(" Expressao ")"| "tail(" Expressao ")"| ExpCompreensaoLista

ExpCompreensaoLista ::= Expressao Gerador| Expressao Gerador Filtro

Gerador ::= “for” Id “in” Expressao| “for” Id “in” Expressao “,” Gerador

Filtro ::= “if” Expressao

BNF da LF3BNF da LF3

ExpBinaria ::=     Expressao "+" Expressao | Expressao "-" Expressao| Expressao "*" Expressao| Expressao "and" Expressao| Expressao "or" Expressao| Expressao ">" Expressao| Expressao ">" Expressao | Expressao "==" Expressao| Expressao "++" Expressao| Expressao ":" Expressao| Expressao "^^" Expressao| Expressao ".." Expressao

ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao

BNF da LF3BNF da LF3

DeclaracaoFuncional ::= DecVariavel| DecFuncao| DeclaracaoFuncional "," DeclaracaoFuncional

DecVariavel ::= "var" Id "=" ExpressaoDecFuncao ::= "fun" ListId "=" ExpressaoListId ::= Id  |  Id, ListIdAplicacao:= Expressao"(" ListExp ")"ListExp ::= Expressao  |  Expressao, ListExp

Demonstração