View
102
Download
0
Category
Preview:
Citation preview
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
Recommended