Um analisador sintatico ou parser LL(1) implementado em C++ que processa gramáticas livres de contexto e valida strings de entrada.
- Diogo Lepri Moreira
- Raphael Garcia Palma
- Pedro Henrique Tavares
- Luigi Castoldi Picchi
- Cálculo automático dos conjuntos FIRST e FOLLOW
- Construção da tabela de análise sintática LL(1)
- Validação de strings com exibição da derivação completa
- Interface interativa para testar múltiplas entradas
- Compilador C++ com suporte ao padrão C++20 (g++ 10+, clang++ 10+)
- Sistema operacional: Linux, macOS ou Windows (com MinGW/WSL)
g++ -std=c++20 parser_ll1_codigo.cpp -o parser_compiladoCrie um arquivo de texto com as regras de produção, uma por linha, no formato:
X→αβγ
Onde:
Xé um não-terminal (letra maiúscula)→separa o lado esquerdo do direitoαβγé o lado direito da produção- Use
epara representar ε (epsilon/vazio) - Delimitadores
()[]{}<>são permitidos mas ignorados
Exemplo (gramatica.txt):
S→(A)
A→aAb
A→e
./parser_compilado gramatica.txtO programa irá:
- Carregar e analisar a gramática
- Exibir os conjuntos FIRST e FOLLOW
- Mostrar a tabela de análise sintática
- Entrar no modo interativo
Digite strings para validar:
➤ aabb
[aabb] aceita. Derivação: S ⇒ (A) ⇒ (aAb) ⇒ (aabb)
➤ ab
[ab] rejeitada
➤ xyz
[xyz] contém símbolos desconhecidos
Para sair, pressione Ctrl+D (Linux/macOS) ou Ctrl+Z + Enter (Windows).
# 1. Criar arquivo de gramática
echo -e "S→(A)\nA→aAb\nA→e" > gramatica.txt
# 2. Compilar
g++ -std=c++20 parser_ll1_codigo.cpp -o parser_compilado
# 3. Executar
./parser_compilado gramatica.txt- Conflitos na tabela de análise indicam que a gramática não é LL(1)