Skip to content

NycolasGarcia/Compilador-A3

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BASIC→C Compiler v3.0.0

BASIC → C Compiler

Compilador visual que traduz código BASIC em programas C equivalentes

Python Tkinter License: MIT PRs Welcome

Funcionalidades · Quick Start · Como Funciona · Sintaxe BASIC · Exemplos


Sobre

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.


Funcionalidades

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

Como Funciona

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
Loading
Fluxo detalhado
  1. 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.

  2. 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.

  3. 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.


Quick Start

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.py

Note

No Linux, caso o Tkinter não esteja instalado, execute: sudo apt install python3-tk


Sintaxe BASIC Suportada

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'+

Exemplos

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
ENDWHILE
Calculadora

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
ENDWHILE

Tip

Todos os exemplos estão disponíveis na pasta examples/ e podem ser carregados diretamente pelo menu Examples da IDE.


Estrutura do Projeto

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

Stack Técnica

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

Colaboradores

Lucas Silva Nycolas Garcia

Contato


Licença

MIT. Veja LICENSE para detalhes.

About

Compilador visual que traduz código BASIC em programas C usando Python

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%