Visão Geral das Funcionalidades
O Compilador Portugol-C oferece um conjunto abrangente de funcionalidades para tradução de código Portugol para C, mantendo a semântica e funcionalidade originais.
Arquitetura do Compilador
graph TD
A[Código Portugol] --> B[Análise Léxica - Flex]
B --> C[Análise Sintática - Bison]
C --> D[Árvore Sintática Abstrata - AST]
D --> E[Análise Semântica]
E --> F[Otimizações]
F --> G[Geração de Código C]
G --> H[Código C]
Funcionalidades Principais
🔍 Análise Léxica (Lexer)
- Reconhecimento de tokens: identificadores, números, operadores, palavras-chave
- Suporte a comentários: linha (
//
) e bloco (/* */
) - Strings e caracteres: aspas duplas e simples
- Números: inteiros e decimais
- Operadores especiais: bitwise, incremento/decremento
🌳 Análise Sintática (Parser)
- Estrutura de programa: validação da sintaxe Portugol
- Construção de AST: árvore sintática abstrata para análise semântica
- Detecção de erros: identificação e relatório de erros sintáticos
- Precedência de operadores: tratamento correto da precedência
🧠 Análise Semântica
- Tabela de símbolos: gerenciamento de variáveis e funções
- Verificação de tipos: compatibilidade entre tipos de dados
- Escopo de variáveis: controle de visibilidade
- Inicialização: verificação de variáveis não inicializadas
⚡ Otimizações
- Propagação de constantes: substituição de expressões por valores constantes
- Eliminação de código morto: remoção de código inalcançável
- Folding de constantes: avaliação de expressões constantes em tempo de compilação
🎯 Geração de Código
- Tradução direta: conversão fiel do Portugol para C
- Formatação: código C bem formatado e legível
- Includes automáticos: adição automática de bibliotecas necessárias
Recursos Suportados
✅ Tipos de Dados
Portugol | C | Descrição |
---|---|---|
inteiro |
int |
Números inteiros |
real |
float |
Números de ponto flutuante |
caracter |
char |
Caracteres ASCII |
logico |
bool |
Valores booleanos |
✅ Estruturas de Dados
- Vetores: Arrays unidimensionais de tamanho fixo
- Variáveis: Declaração e inicialização
- Constantes: Valores literais
✅ Operadores
Aritméticos
+
(soma)-
(subtração)*
(multiplicação)/
(divisão)%
(módulo)
Relacionais
==
(igual)!=
(diferente)<
(menor)>
(maior)<=
(menor ou igual)>=
(maior ou igual)
Lógicos
&&
(E lógico)||
(OU lógico)!
(NÃO lógico)
Bitwise
&
(E bitwise)|
(OU bitwise)^
(XOR bitwise)~
(NOT bitwise)<<
(shift left)>>
(shift right)
Unários
++
(incremento)--
(decremento)-
(negação)
✅ Estruturas de Controle
Condicionais
se
/senao
(if/else)escolha
/caso
(switch/case)
Laços
enquanto
(while)para
(for)
Controle de Fluxo
retorne
(return)pare
(break)
✅ Entrada e Saída
leia()
- Leitura de dados do usuárioescreva()
- Escrita de dados na tela- Suporte a múltiplos argumentos
- Formatação automática por tipo
✅ Funções
- Declaração de funções
- Parâmetros por valor e referência
- Tipos de retorno
- Função principal
inicio()
Limitações Conhecidas
❌ Não Suportado (ainda)
- Arrays multidimensionais
- Strings como tipo nativo
- Structs/registros
- Ponteiros explícitos
- Alocação dinâmica de memória
- Bibliotecas externas
Qualidade e Confiabilidade
🧪 Sistema de Testes
- 32 casos de teste automatizados
- 100% de cobertura das funcionalidades implementadas
- CI/CD integrado com GitHub Actions
- Validação automática de cada commit
📊 Métricas
- Taxa de sucesso: 100% nos testes automatizados
- Tempo de compilação: < 1s para programas típicos
- Compatibilidade: GCC 11.4.0+, Flex 2.6.4+, Bison 3.8.2+
🔧 Robustez
- Tratamento de erros: Mensagens claras e precisas
- Recuperação: Continuação após erros não fatais
- Validação: Verificação de entrada em tempo de compilação
Roadmap Futuro
🚀 Próximas Funcionalidades
- Strings nativas: Suporte completo a strings
- Arrays multidimensionais: Matrizes e tensores
- Structs: Tipos de dados compostos
- Funções avançadas: Recursão, sobrecarga
- Bibliotecas: Sistema de módulos
🎯 Melhorias Planejadas
- Performance: Otimizações adicionais
- Diagnósticos: Mensagens de erro mais precisas
- IDE: Plugin para editores populares
- Debugging: Geração de informações de debug