Sobre o Projeto
Compilador JavaScript → Python | Disciplina de Compiladores 1 | PBL | Professor Sérgio Freitas.
Visão Geral
O objetivo deste projeto é construir um compilador que recebe um programa escrito em um subconjunto de JavaScript e produz código Python equivalente e funcionalmente correto.
O projeto é desenvolvido no contexto da disciplina de Compiladores 1, aplicando a metodologia ágil Scrum com sprints semanais. Todas as decisões técnicas são documentadas e justificadas ao longo do desenvolvimento.
O fluxo completo do compilador é:
Pipeline de compilação
programa.js
│
▼
┌─────────────┐
│ Flex/Lexer │ lê o texto e quebra em tokens
│ (lexer.l) │ ex: "let x = 5" → [LET, ID("x"), ASSIGN, NUM(5)]
└─────────────┘
│
▼ fluxo de tokens
┌─────────────┐
│ Bison │ verifica a gramática e monta a árvore
│ (parser.y) │ ex: tokens → nó "declaração de variável"
└─────────────┘
│
▼ AST (Árvore Sintática Abstrata)
┌─────────────┐
│ Gerador de │ percorre a árvore e escreve Python
│ código │ ex: nó "declaração" → "x = 5"
└─────────────┘
│
▼
programa.py
Objetivo do Compilador
Traduzir programas escritos em um subconjunto de JavaScript para Python equivalente, cobrindo diferentes instruções da linguagem.
| Construção JS | Equivalente Python | Status |
|---|---|---|
let x = 5 / const x = 5 |
x = 5 |
Implementado |
if / else |
if / else: |
Em progresso |
while (cond) |
while cond: |
Em progresso |
for (let i = 0; i < n; i++) |
for i in range(...) |
Em progresso |
function nome(params) |
def nome(params): |
Em progresso |
console.log(x) |
print(x) |
Em progresso |
| Operadores aritméticos e lógicos | Equivalentes diretos | Em progresso |
Esta tabela será atualizada conforme o avanço das sprints.
Tecnologias Utilizadas
Linguagem principal
- C — implementação do driver, estruturas da AST e gerador de código
Ferramentas de geração de compilador
- Flex — gerador de analisador léxico.
- Bison — gerador de analisador sintático.
Infraestrutura
- GitHub — repositório, controle de versão e hospedagem da documentação
- GitHub Pages — site do projeto
- Shell Script — automação de build e testes (
build.sh,test.sh)
Estrutura do Repositório
compilador_flex_bison/
│
├── build.sh
├── test.sh
│
├── src/
│ ├── common.h
│ ├── lexer.l
│ ├── parser.y
│ └── main.c
│
├── build/
│ ├── parser.tab.c
│ ├── parser.tab.h
│ ├── lexer.yy.c
│ └── compilador
│
├── tests/
│
└── docs/
├── paginas/
└── index.html
Fases do Compilador
1. Análise Léxica (Flex)
O arquivo lexer.l define as expressões regulares para todos os tokens
suportados, como palavras-reservadas, identificadores, literais, operadores e delimitadores.
2. Análise Sintática (Bison)
O arquivo parser.y define a gramática livre de contexto do subconjunto de
JavaScript suportado. O Bison gera um parser LALR(1) que consome o fluxo de tokens do
Flex e constrói a Árvore Sintática Abstrata (AST).
3. Análise Semântica
Verificação de tipos, escopos e uso correto de variáveis e funções. A ser integrada na AST.
4. Geração de Código
Percorre a AST e emite código Python equivalente. Será implementada em entrega posterior.
Equipe
| Membro | Responsabilidade principal |
|---|---|
| Manuella Perlin | Análise léxica (Flex) |
| Otávio | Análise sintática (Bison) |
| João | Tabela de símbolos |
| Lucas Freitas | Testes |
| Gabriel Fae | Documentação e integração |
Metodologia
O projeto segue o Scrum com sprints semanais. O planejamento, as atas de reunião e o progresso de cada sprint estão documentados ao longo do site.
Commits frequentes são feitos no GitHub ao longo de cada sprint, refletindo o progresso incremental do projeto.