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

Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

Embed Size (px)

Citation preview

Page 1: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

Resultado FinalResultado Final

Projeto de PLP

Guilherme OliveiraEverton Marques

Ricardo Cavalcanti

Page 2: Resultado Final Projeto de PLP Guilherme Oliveira Everton 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

Page 3: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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)

Page 4: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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

Page 5: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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

Page 6: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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];

Page 7: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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.

Page 8: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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.

Page 9: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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.

Page 10: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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]]

Page 11: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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

Page 12: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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

Page 13: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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

Page 14: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

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

Page 15: Resultado Final Projeto de PLP Guilherme Oliveira Everton Marques Ricardo Cavalcanti

Demonstração