Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouEric Pimentel Alterado mais de 9 anos atrás
1
Projeto de PLP Resultado Final Guilherme Oliveira Everton Marques
Ricardo Cavalcanti Resultado Final
2
Objetivos 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
3
Resultados 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)
4
Resultados 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
5
Resultados 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
6
Resultados 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];
7
Resultados 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.
8
Resultados 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.
9
Resultados 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.
10
Resultados 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]]
11
BNF da LF3 Programa ::= Expressao Expressao ::= Valor
| ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorFuncao ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ValorFuncao ::= "fn" Id Id "." Expressao
12
BNF 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
13
BNF 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
14
BNF da LF3 DeclaracaoFuncional ::= DecVariavel | DecFuncao | DeclaracaoFuncional "," DeclaracaoFuncional DecVariavel ::= "var" Id "=" Expressao DecFuncao ::= "fun" ListId "=" Expressao ListId ::= Id | Id, ListId Aplicacao:= Expressao"(" ListExp ")" ListExp ::= Expressao | Expressao, ListExp
15
Demonstração
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.