Compilador visual que traduz código BASIC em programas C equivalentes
Funcionalidades · Quick Start · Como Funciona · Sintaxe BASIC · Exemplos
O BASIC → C Compiler é uma ferramenta open-source que compila código escrito em uma variante simplificada de BASIC para programas equivalentes em C. O compilador implementa as três fases clássicas: análise léxica, análise sintática e geração de código.
A interface é uma IDE com tema escuro, syntax highlighting, números de linha, atalhos de teclado, gerenciamento de arquivos e exemplos prontos para uso.
Note
Este projeto foi originalmente desenvolvido como trabalho acadêmico (Teoria da Computação e Compiladores, 2023) e foi completamente reconstruído em 2026 com uma arquitetura limpa e UI moderna.
Compilador Completo em 3 Fases
- Pipeline completo: Lexer → Parser → Emitter
- Análise léxica com rastreamento de linha e coluna
- Análise sintática descendente recursiva (top-down)
- Geração de código C válido e compilável
- Tabela de símbolos com variáveis e labels declarados
- Mensagens de erro detalhadas com número da linha
IDE com Tema Escuro
- Syntax highlighting para keywords, strings, números, operadores e comentários
- Números de linha sincronizados com scroll
- Três painéis: código fonte, tabela de símbolos e saída compilada
- Barra de status com posição do cursor e mensagens de compilação
- Layout responsivo e redimensionável
Gerenciamento de Arquivos
- Abrir e salvar arquivos
.basic/.bas - Exportar código C compilado para
.c - Menu de exemplos com programas prontos
- Atalhos:
Ctrl+N,Ctrl+O,Ctrl+S,Ctrl+Enter
Referência da Linguagem
- Dialog integrado com toda a sintaxe BASIC suportada
- Exemplos embutidos: Calculadora, Fibonacci, Jogo de Adivinhação, e mais
- Gramática formal BNF disponível em
MyGrammar.txt
flowchart LR
A[Código BASIC] --> B[Lexer]
B --> C[Tokens]
C --> D[Parser]
D --> E[Emitter]
E --> F[Código C]
F --> G[out.c]
style A fill:#1e1e2e,stroke:#89b4fa,color:#cdd6f4
style B fill:#1e1e2e,stroke:#cba6f7,color:#cdd6f4
style C fill:#1e1e2e,stroke:#89b4fa,color:#cdd6f4
style D fill:#1e1e2e,stroke:#cba6f7,color:#cdd6f4
style E fill:#1e1e2e,stroke:#cba6f7,color:#cdd6f4
style F fill:#1e1e2e,stroke:#a6e3a1,color:#cdd6f4
style G fill:#1e1e2e,stroke:#a6e3a1,color:#cdd6f4
Fluxo detalhado
-
Lexer (MyLexer.py) Tokeniza o código fonte caractere por caractere, identificando keywords, números, strings, operadores e identificadores. Rastreia linha e coluna para mensagens de erro precisas.
-
Parser (MyParser.py) Valida a gramática usando análise descendente recursiva. Mantém tabela de símbolos (variáveis) e tabela de labels. Direciona a geração de código C através do Emitter conforme cada construção é reconhecida.
-
Emitter (MyEmitter.py) Acumula o código C gerado separando header (includes e declarações de variáveis) do corpo da função main. Escreve o resultado final no arquivo de saída.
Tratamento de erros: Exceções tipadas (LexerError, ParseError) com informação de linha/coluna. A UI captura e exibe os erros no painel de saída sem crashar.
Tip
Pré-requisito: Python 3.8 ou superior. Nenhuma dependência externa é necessária, o Tkinter já vem com o Python.
# 1. Clone o repositório
git clone https://github.com/eoLucasS/Compilador-A3.git
# 2. Entre na pasta do projeto
cd Compilador-A3
# 3. Execute o compilador
python MyCompiler.pyNote
No Linux, caso o Tkinter não esteja instalado, execute: sudo apt install python3-tk
| Instrução | Descrição | Exemplo |
|---|---|---|
PRINT |
Imprime texto ou expressão numérica | PRINT "Olá" / PRINT x + 1 |
INPUT |
Lê um número do stdin | INPUT idade |
LET |
Atribui valor a uma variável | LET x = 10 |
IF...THEN...ENDIF |
Bloco condicional | IF x > 5 THEN |
WHILE...REPEAT...ENDWHILE |
Bloco de repetição | WHILE x > 0 REPEAT |
LABEL / GOTO |
Rótulos e saltos | LABEL inicio / GOTO inicio |
Operadores: + - * / == != < <= > >=
Comentários: Linhas com # são ignoradas.
Variáveis: Tipo float, declaradas automaticamente no primeiro LET ou INPUT.
Gramática Formal (BNF)
parse ::= {statement}
statement ::= "PRINT" (expression | string) nl
| "IF" comparison "THEN" nl {statement} "ENDIF" nl
| "WHILE" comparison "REPEAT" nl {statement} "ENDWHILE" nl
| "LABEL" ident nl
| "GOTO" ident nl
| "LET" ident "=" expression nl
| "INPUT" ident nl
comparison ::= expression (("==" | "!=" | ">" | ">=" | "<" | "<=") expression)+
expression ::= term {( "-" | "+" ) term}
term ::= unary {( "/" | "*" ) unary}
unary ::= ["+" | "-"] primary
primary ::= number | ident
nl ::= '\n'+
Hello World
BASIC:
PRINT "Hello, World!"
PRINT "Bem-vindo ao Compilador BASIC"Saída C:
#include <stdio.h>
int main(void){
printf("Hello, World!\n");
printf("Bem-vindo ao Compilador BASIC\n");
return 0;
}Fibonacci
BASIC:
PRINT "Sequencia de Fibonacci"
PRINT "Quantos termos?"
INPUT n
LET a = 0
LET b = 1
LET count = 0
WHILE count < n REPEAT
PRINT a
LET temp = b
LET b = a + b
LET a = temp
LET count = count + 1
ENDWHILECalculadora
BASIC:
LET Loop = 1
WHILE Loop == 1 REPEAT
PRINT "Calculadora BASIC"
PRINT "Primeiro numero:"
INPUT a
PRINT "Operacao (1=soma, 2=sub, 3=mul, 4=div):"
INPUT op
PRINT "Segundo numero:"
INPUT b
IF op == 1 THEN
LET result = a + b
PRINT result
ENDIF
IF op == 2 THEN
LET result = a - b
PRINT result
ENDIF
PRINT "Continuar? (1=sim, 0=nao)"
INPUT Loop
ENDWHILETip
Todos os exemplos estão disponíveis na pasta examples/ e podem ser carregados diretamente pelo menu Examples da IDE.
Compilador-A3/
├── MyCompiler.py # Aplicação GUI e orquestração da compilação
├── MyLexer.py # Analisador léxico (tokenização)
├── MyParser.py # Analisador sintático (validação + geração de código)
├── MyEmitter.py # Emissor de código C
├── MyGrammar.txt # Especificação formal da gramática BNF
├── .gitignore # Regras de ignore do Git
├── examples/ # Programas BASIC de exemplo
│ ├── hello_world.basic
│ ├── calculator.basic
│ ├── fibonacci.basic
│ ├── guess_the_number.basic
│ ├── multiplication_table.basic
│ └── countdown.basic
└── assets/
└── img/
└── preview.png # Screenshot da IDE
| Tecnologia | Uso |
|---|---|
| Python 3 | Linguagem principal do compilador e da GUI |
| Tkinter + ttk | Interface gráfica nativa, tema escuro customizado |
| BASIC | Linguagem fonte (subconjunto simplificado) |
| C | Linguagem alvo da compilação |
| Lucas Lopes | Nycolas Garcia |
|---|---|
MIT. Veja LICENSE para detalhes.