Skip to content

devpedromonteiro/PLP-PROJECT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 

Repository files navigation

PLP-PROJECT

Projeto da disciplina de Paradigmas de Linguagem(IN-1007) de Programação do CIn - UFPE

EQUIPE:

Escopo do Projeto: Implementação de ValorMapa na Linguagem Funcional 3

1. Objetivo

Implementar um novo tipo de valor ValorMapa que permita armazenar e manipular pares chave-valor de forma funcional, mantendo a imutabilidade e transparência referencial da linguagem.

2. Gramática - Extensões Necessárias

// Adição ao ValorConcreto existente

ValorConcreto ::= ValorInteiro

         | ValorBooleano

         | ValorString

         | ValorLista

         | ValorMapa

// Novas expressões para manipulação de mapas

// Compreensão de mapas

ExpCompreensaoMapa ::= "{" Expressao "=>" Expressao Gerador+ [Filtro] "}"

Gerador ::= "for" Id "in" Expressao | "for" Id "in" Expressao [","] Gerador

Filtro ::= "if" Expressao

// Definições das demais expressões

ExpMapa ::= "{" Expressao "=>" Expressao "}"

ExpInsert ::= "insert" "(" Expressao "," Expressao "," Expressao ")"

ExpRemove ::= "remove" "(" Expressao "," Expressao ")"

ExpGet ::= "get" "(" Expressao "," Expressao ")"

ExpContains ::= "contains" "(" Expressao "," Expressao ")"

ExpKeys ::= "keys" "(" Expressao ")"

ExpValues ::= "values" "(" Expressao ")"

// Uso das expressões

ExpMapa ::= ExpMapa

         | ExpInsert

         | ExpRemove

         | ExpGet

         | ExpContains

         | ExpKeys

         | ExpValues

         | ExpCompreensaoMapa

3. Operações Suportadas

3.1. Criação

let var mapa = { 1 => 2, 3 => 4 } in ...

3.2. Inserção

let var novoMapa = insert(mapa, 4, 5) in ...

3.3. Remoção

let var semB = remove(mapa, 1) in ...

3.4. Consulta

let var valor = get(mapa, 3) in ...
let var existe = contains(mapa, 3) in ...

3.5. Coleções

let var chaves = keys(mapa) in ...
let var valores = values(mapa) in ...

4. Exemplos de Uso

// Criação e manipulação de mapa
let var mapa = { 1 => 2, 3 => 4 } in
let var comTres = insert(mapa, 4, 5) in
let var semDois = remove(comTres, 1) in
let var temUm = contains(semDois, 3) in
let var valor = get(semDois, 4) in
let var todasChaves = keys(semDois) in
valor

// Exemplo com mapas aninhados
let var configuracoes = {
    "cores" => {
        "primaria" => "azul",
        "secundaria" => "vermelho"
    },
    "tamanhos" => {
        "pequeno" => "10px",
        "grande" => "20px"
    }
} in
get(get(configuracoes, "cores"), "primaria")

4.1 ExpCompreensaoMapa (Compreensão de Mapa)

// Sem filtro
let var quadrados = { x => x * x for x in [1,2,3] } in
// Resultado: {1 => 1, 2 => 4, 3 => 9}

// Com filtro
let var pares = { x => x * 2 for x in [1,2,3,4,5] if x > 2 } in
// Resultado: {3 => 6, 4 => 8, 5 => 10}

4.2 Exemplos Complexos Combinando os Conceitos

// Criando mapa com compreensão e filtro
let var dados = [1, 2, 3, 4, 5] in
let var mapa = { 
    x => x * x 
    for x in dados 
    if x > 2 
} in

5 BNF Completa:

Programa ::= Expressao

Expressao ::= Valor

         | ExpUnaria

         | ExpBinaria

         | ExpDeclaracao

         | Id

         | Aplicacao

         | IfThenElse

         | ExpMapa

Valor ::= ValorConcreto

         | ValorAbstrato

ValorAbstrato ::= ValorFuncao

ValorConcreto ::= ValorInteiro

         | ValorBooleano

         | ValorString

         | ValorLista

         | ValorMapa

ValorFuncao ::= "fn" Id Id "." Expressao

ExpUnaria ::= ExpMenos "-" Expressao

         | ExpNot "not" Expressao

         | ExpLength "length" Expressao

         | ExpHead "head" Expressao

         | ExpTail "tail" Expressao

         | ExpCompreensaoLista

         | ExpCompreensaoMapa

ExpCompreensaoLista ::= Expressao Gerador

         | Expressao Gerador Filtro

ExpCompreensaoMapa ::= "{" Expressao "=>" Expressao Gerador+ [Filtro] "}"

Gerador ::= "for" Id "in" Expressao | "for" Id "in" Expressao [","] Gerador

Filtro ::= "if" Expressao

ExpBinaria ::= Expressao "+" Expressao

         | Expressao "-" Expressao

         | Expressao "*" Expressao

         | Expressao ">" Expressao

         | Expressao "<" Expressao

         | Expressao "and" Expressao

         | Expressao "or" Expressao

         | Expressao "==" Expressao

         | Expressao "++" Expressao

         | Expressao ".." Expressao

         | Expressao ":" Expressao

         | Expressao "^^" Expressao

// Definições das expressões

ExpMapa ::= "{" Expressao "=>" Expressao "}"

ExpInsert ::= "insert" "(" Expressao "," Expressao "," Expressao ")"

ExpRemove ::= "remove" "(" Expressao "," Expressao ")"

ExpGet ::= "get" "(" Expressao "," Expressao ")"

ExpContains ::= "contains" "(" Expressao "," Expressao ")"

ExpKeys ::= "keys" "(" Expressao ")"

ExpValues ::= "values" "(" Expressao ")"

ExpCompreensaoMapa ::= "{" Expressao "=>" Expressao Gerador+ [Filtro] "}"

// Uso das expressões

ExpMapa ::= ExpMapa

         | ExpInsert

         | ExpRemove

         | ExpGet

         | ExpContains

         | ExpKeys

         | ExpValues

         | ExpCompreensaoMapa

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

DeclaracaoFuncional ::= DecVariavel

         | DecFuncao

         | DecComposta

DecVariavel ::= "var" Id "=" Expressao

DecFuncao ::= "fun" ListId "=" Expressao

DecComposta ::= DeclaracaoFuncional "," DeclaracaoFuncional

ListId ::= Id | Id "," ListId

Aplicacao ::= Expressao "(" ListExp ")"

ListExp ::= Expressao | Expressao "," ListExp

Classes Principais

ValorMapa
ExpCompreensaoMapa
ExpInsert
ExpRemove
ExpGet
ExpContains
ExpKeys
ExpValues

Parser

Funcional3

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages