Skip to content

Alisson-1/dualList

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 

Repository files navigation

Projeto - Listas Duplamente Encadeadas na Linguagem Imperativa 2

Universidade Federal de Pernambuco

Centro de Informática
Disciplina: IN1007 2025.2 - Paradigmas de Linguagens de Programação

Equipe

Introdução

Este projeto tem como objetivo expandir a Linguagem Imperativa 2 por meio da implementação da estrutura de dados Lista Duplamente Encadeada (Double Linked List). Essa estrutura é amplamente utilizada em linguagens de paradigma imperativo por permitir armazenamento dinâmico e navegação bidirecional entre elementos.

Listas duplamente encadeadas são compostas por nós que mantêm referências tanto para o elemento anterior quanto para o próximo, o que possibilita operações eficientes de inserção, remoção e atualização em qualquer posição da lista. Essa flexibilidade as torna uma escolha natural em contextos que demandam manipulação dinâmica de coleções.

Durante a análise da Linguagem Imperativa 2, observou-se que ainda não há suporte nativo a esse tipo de estrutura. Assim, este projeto busca integrar listas duplamente encadeadas à linguagem, respeitando seus princípios sintáticos e semânticos.

Estrutura e Funcionamento

A estrutura proposta segue os princípios clássicos de listas duplamente encadeadas:

  • Cada nó contém um valor, uma referência para o nó anterior e outra para o nó seguinte.

  • O primeiro nó é denominado cabeça (head) e o último, cauda (tail).

Operações básicas incluem:

  • Inserção de um novo nó em qualquer posição;

  • Remoção de nós por valor;

  • Atualização de valores existentes;

  • Visualização da lista completa, permitindo iteração em ambas as direções.

Objetivos

Ao final do projeto, espera-se que a Linguagem Imperativa 2 seja capaz de:

  • Declarar e manipular listas duplamente encadeadas;

  • Realizar operações dinâmicas de inserção, remoção e atualização;

  • Navegar pela lista em ambas as direções;

  • Manter a coerência da BNF e dos mecanismos de parsing da linguagem.

Este repositório contém os arquivos e implementações necessários para adicionar suporte completo à estrutura de listas duplamente encadeadas na Linguagem Imperativa 2.


Abaixo está a Backus-Naur Form (BNF) atualizada para a Linguagem Imperativa 2. As classes em negrito indicam as partes que foram adicionadas ou alteradas para suportar a programação reativa.

BNF

Programa ::= Comando

Comando ::= Atribuicao

         | ComandoDeclaracao

         | While

         | IfThenElse

         | IO

         | SequenciaComando Comando ";" Comando

         | Skip

         | ChamadaProcedimento

         | [OperacaoLista]

Skip ::=

Atribuicao ::= Id ":=" Expressao

Expressao ::= Valor | ExpUnaria | ExpBinaria | Id

Valor ::= ValorConcreto

ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString

ExpUnaria ::= ExpMenos "-" Expressao | ExpNot "not" Expressao | ExpLenght "lenght" Expressao

ExpBinaria ::= ExpSoma Expressao "+" Expressao

         | ExpSub Expressao "-" Expressao

         | ExpAnd Expressao "and" Expressao

         | ExpOr Expressao "or" Expressao

         | ExpEquals Expressao "==" Expressao

         | ExpConcat Expressao "++" Expressao

ComandoDeclaracao :: = "{" Declaracao ";" Comando "}"

Declaracao ::= DeclaracaoVariavel

         | DeclaracaoProcedimento

         | DeclaracaoComposta          |CriacaoLista

DeclaracaoVariavel ::= “var” Id “=” Expressao

DeclaracaoComposta ::= Declaracao “,” Declaracao

DeclaracaoProcedimento ::= "proc" Id "(" [ ListaDeclaracaoParametro ] ")" "{" Comando "}"

ListaDeclaracaoParametro ::= DeclaracaoParametro Tipo Id |
         | ListaDeclaracaoParametro Tipo Id "," ListaDeclaracaoParametro

Tipo ::= “string” | “int” | “boolean” | TipoLista

TipoLista ::= "list" "<" Tipo ">"

While ::= “while” Expressao “do” Comando

IfThenElse ::= “if” Expressao “then” Comando “else” Comando

IO ::= Write "write" "(" Expressao ")" | Read "read" "(" Id ")"

ChamadaProcedimento ::= "call" Id "(" [ ListaExpressao ] ")"

ListaExpressao ::= Expressao | Expressao, ListaExpressao

CriacaoLista ::= "dllist" "(" ")"

OperacaoLista ::= Id "." MetodoLista

MetodoLista ::= "add" "(" Expressao ")"

         | "remove" "(" Expressao ")"

         | "update" "(" Expressao "," Expressao ")"

         | "show" "(" ")"

SequenciaComando ::= Comando ";" Comando


Classes Auxiliares

AmbienteExecucaoImperativa2
ContextoExecucaoImperativa2
DefReativo
Publisher
Subscriber
VariavelReativaPublisher
VariavelReativaJaDeclaradaException
VariavelReativaNaoDeclaradaException
CicloDeDependenciaException


Parser

Imperative2

A gramática da Linguagem Imperativa 2 será estendida para reconhecer a declaração e manipulação de listas duplamente encadeadas, incluindo novas regras para criação, iteração e modificação de nós.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors