Linguagens Formais e Autômatos

Implementação de um avaliador de linguagens regulares

Última ocorrência: 2024-1 em Universidade Lasalle Canoas

Posts Relacionados

Objetivo

Entender o processo de análise léxica a partir da utilização de autômatos finitos para o reconhecimento de linguagens regulares e a aplicação prática dos conceitos teóricos vistos em aula.

Pré-requisitos

Tarefas

  1. Criar um fork do projeto automata_2024_t1
  2. Deve ser criado um “módulo” com o nome automata com as seguintes funções:
    • load_automata(filename: str): -> tuple(Q, Sigma, delta, q0, F)
      • Esta função lê os dados de um autômato finito a partir de um arquivo de texto e retorna uma estrutura que representa o autômato.
    • process(automata, word: List[String]): -> Dict[String:String]
      • Esta função processa uma lista de palavras utilizando o autômato dado e retorna um mapa associando cada palavra ao resultado do automato.
      • Os resultados possíveis são ACEITA, caso a palavra seja aceita pelo autômato; REJEITA, caso a palavra seja rejeitada pelo autômato; e INVÀLIDA, caso a palavra seja inválida, ou seja, contenha um símbolo que não está no alfabeto.
  3. O formato do arquivo de descrição do autômato é:
     <lista de símbolos do alfabeto, separados por espaço (' ')>
     <lista de nomes de estados>
     <lista de nomes de estados finais>
     <nome do estado inicial>
     <lista de regras de transição, com "origem símbolo destino">
    
    • Por exemplo:
       a b
       q0 q1 q2 q3
       q0 q3
       q0
       q0 a q1
       q0 b q2
       q1 a q0
       q1 b q3
       q2 a q3
       q2 b q0
       q3 a q1
       q3 b q2
      
  4. A função de leitura do arquivo deve validar se o formato do autômato está correto, e caso não esteja gerar uma exceção (Exception).
  5. Serão fornecidos testes automatizados para a avaliação do trabalho. Os testes podem ser executadosu utilizando o utilitário behave ou o utilitário tox, que podem ser instalados em um ambiente virtual do Python.

Entrega do trabalho

O aluno deverá criar um pull request contra o repositório original do trabalho. O título do pull request deve conter o nome do aluno e o corpo do pull request pode conter um comentário sobre o trabalho.

Uma vez criado o pull request ele pode ser atualizado a qualquer momento, até a data limite de entrega.

Na data limite, o pull request receberá um label de AVALIADO, um comentário com o resultado da avaliação, será fechado, e não poderá mais ser alterado.

No LEX, todos os alunos do grupo devem inserir, até a data limite, o link para o pull request de entrega do trabalho.

A data máxima de entrega é dia 28 de abril de 2024.

Observações