Voltar para a pagina inicial

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 PerlinAnálise léxica (Flex)
OtávioAnálise sintática (Bison)
JoãoTabela de símbolos
Lucas FreitasTestes
Gabriel FaeDocumentaçã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.


Links Úteis