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

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

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

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