Primeira parte do trabalho de Gramática e Compiladores do curso de Ciência da Computação do IFG-Anápolis.
Este projeto implementa um analisador léxico para identificar e classificar tokens de uma linguagem de programação simplificada, com foco especial na detecção de erros léxicos. O analisador processa arquivos de código fonte e categoriza cada token encontrado, identificando quando há palavras-chave escritas incorretamente ou outras inconsistências lexicais.
- Identificar erros léxicos em código fonte
- Classificar tokens em categorias (palavras-chave, variáveis, identificadores, etc.)
- Detectar similaridades entre tokens incorretos e palavras-chave válidas
- Processar múltiplos arquivos automaticamente
O analisador identifica os seguintes tipos de tokens:
- KEYWORD: Palavras-chave da linguagem (
principal,inteiro,escreva,leia, etc.) - VARIABLE: Variáveis (devem começar com
!) - FUNC_NAME: Nomes de funções (devem começar com
__) - INTEGER: Números inteiros
- IDENTIFIER/OTHER: Outros identificadores válidos
- LEFT_PAREN/RIGHT_PAREN: Parênteses
(e) - LEFT_BRACE/RIGHT_BRACE: Chaves
{e} - SEMICOLON: Ponto e vírgula
; - LEXICAL ERROR: Tokens com erros léxicos
O sistema utiliza o algoritmo de distância de Levenshtein para detectar:
- Palavras-chave escritas incorretamente (ex:
pincipal→principal) - Variações com caracteres faltando ou extras
- Prefixos de palavras-chave válidas
principal- função principalinteiro- tipo de dados inteiroretorno- comando de retornoescreva- comando de saídaleia- comando de entradafuncao- declaração de funçãose- condicional ifsenao- condicional elsepara- laço for
- Variáveis: devem começar com
!(ex:!a,!numero) - Funções: devem começar com
__(ex:__soma) - Strings: delimitadas por aspas duplas
compiler/
├── main.c # Código principal do analisador
├── main # Executável compilado
├── ASCII.TXT # Arquivo de referência ASCII
├── data/ # Arquivos de teste (.txt)
│ ├── exemplo_1.txt
│ ├── exemplo_2.txt
│ ├── exemplo_3.txt
│ ├── exemplo_4.txt
│ ├── Erro_exemplo_5.txt
│ ├── Erro_exemplo_6.txt
│ ├── Erro_Exemplo_7.txt
│ ├── Erro_Exemplo_8.txt
│ └── Erro_Exemplo_9.txt
└── datartf/ # Arquivos de teste (.rtf)
└── [mesmos arquivos em formato RTF]
- Compilador GCC
- Sistema Linux/Unix
gcc -o main main.c./mainO programa irá processar automaticamente todos os arquivos na pasta data/ e exibir:
- Lista de tokens encontrados
- Classificação de cada token
- Detecção de erros léxicos
- Uso de memória
==============================
Processando arquivo: ./data/Erro_Exemplo_9.txt
Total de tokens: 13
Classificação dos tokens:
tokens[0] = "principal" -> KEYWORD
tokens[1] = "(" -> LEFT_PAREN
tokens[2] = ")" -> RIGHT_PAREN
tokens[3] = "{" -> LEFT_BRACE
tokens[4] = "inteiro" -> KEYWORD
tokens[5] = "!a" -> VARIABLE
tokens[6] = "!b2" -> VARIABLE
tokens[7] = "=" -> IDENTIFIER/OTHER
tokens[8] = "7" -> INTEGER
tokens[9] = ";" -> SEMICOLON
tokens[10] = "escrva" -> LEXICAL ERROR
Memória ocupada: 2048 Bytes ou 2.00 KB
- Limite de memória: 2MB (2048 KB)
- Alocação segura com verificação de limites
- Liberação automática de memória
- Leitura completa do arquivo em memória
- Remoção de BOM UTF-8 quando presente
- Tokenização baseada em delimitadores
- Distância de Levenshtein para detecção de similaridade
- Tokenização com múltiplos delimitadores
- Classificação automática de tokens
Desenvolvido por:
- Davi Galdino
- Ana Misque Te amo <3
Este projeto foi desenvolvido para fins acadêmicos como parte do curso de Compiladores.