Este é o repositório para o nosso trabalho de Linguagens de Programação, que consiste na implementação de um verificador de Frames PDL, utilizando a linguagem de programação Haskell.
O trabalho foi feito pelos alunos:
- Gabriel Gavazzi Felix
- Lucas Souza de Oliveira
O objetivo deste projeto é desenvolver um verificador de frames PDL. O verificador será capaz de analisar se um grafo F = (W, Rα) corresponde a um frame válido para um dado programa π, e caso contrário, irá retornar o estado do programa que quebra a compatibilidade.
O projeto está sendo desenvolvido em Haskell, uma linguagem funcional que nos serviu como introdução a este paradigma de programação.
O repositório possui os seguintes arquivos:
main
: Contém o arquivo binário executável do programamain.hs
: O código fonte do programa.main-old.hs
: A versão antiga do programa, que foi abandonadaREADME.md
: Este arquivo, que fornece informações sobre o projeto e sobre o funcionamento do programa.exemplos.txt
: Arquivo de texto com exemplos prontos para testar a execução do programa mais facilmente.
O funcionamento do nosso verificador se dá da seguinte forma:
- O usuário insere a fórmula do programa na variável
postfixExpression
, em notação pós fixada. (Checar a Seção Exemplos para mais informações) - O usuário insere a String do estado inicial do grafo, no último
print
, da seguinte forma:print (avaliaExpressao frame raiz ESTADO_INICIAL)
- O usuário compila o programa e o executa. (instruções para compilação e execução na Seção Instruções de Compilação/Execução)
- O usuário digita os estados de entrada no seguinte formato:
estado_origem estado_destino programa
(sendo os dois primeiros Strings e o último um Char). - O usuário continua a entrada, até que ele para, digitando
pronto
. - O programa executa a verificação e, caso seja o grafo F seja válido, retorna True; caso contrário, retorna False e o estado do programa em que houve a quebra da compatibilidade.
Para compilar e executar o programa, siga as etapas abaixo:
- Certifique-se de ter o GHC (Glasgow Haskell Compiler) e o make instalados em sua máquina.
- Clone este repositório em seu ambiente local.
- Acesse o diretório raíz do repositório por meio do terminal.
- Compile o código Haskell executando o seguinte comando:
make
. - Após a compilação bem-sucedida, execute o programa com o comando:
./main
. - Siga as instruções para entrada na Seção Funcionamento.
Em todos os exemplos abaixo, o estado inicial é w1. Além do mais, na fórmula, o item da esquerda é a fórmula em PDL, e na direita (depois do '//') é a notação pós-fixada. Você deve digitar a notação pós-fixada na varíavel postfixExpression
.
Caso o usuário se interesse, também pode checar o arquivo exemplos.txt
, que contém toda a entrada necessária para a execução.
Fórmula: (a;b) // ab;
; Retorno: False
Fórmula: (a*;b) // a*b;
; Retorno: True
Fórmula: (a*;b)Ua // a*b;aU
; Retorno: True
Fórmula: (a;b;b?;a) // ab;b?;a;
; Retorno: True
Fórmula: (a*;b) // a*b;
; Retorno: False
Este projeto está licenciado sob a GNU General Public License v3.0.