Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
a1e7485
feat(opt): add constant folding pass
HugoFreitass Jun 15, 2026
e10f38e
feat(opt): add dead code elimination pass
HugoFreitass Jun 15, 2026
5566b33
feat(opt): add copy propagation pass stub
HugoFreitass Jun 15, 2026
0892a74
feat(opt): add common subexpression pass stub
HugoFreitass Jun 15, 2026
23b0d5b
feat(opt): add loop invariant motion pass stub
HugoFreitass Jun 15, 2026
7e84d04
feat(opt): add inlining pass stub
HugoFreitass Jun 15, 2026
282f160
feat(opt): add pass manager pipeline
HugoFreitass Jun 15, 2026
a4e33dc
feat(codegen): add intermediate cfg model
HugoFreitass Jun 15, 2026
757419f
feat(cli): add optimization level flag
HugoFreitass Jun 15, 2026
20080e3
fix(opt): derive default opt level
HugoFreitass Jun 15, 2026
8beec96
Merge remote-tracking branch 'origin/developer' into feat/issue134-op…
Bappoz Jun 17, 2026
72e4211
Merge pull request #145 from Bappoz/feat/issue134-optimization-infras…
Bappoz Jun 17, 2026
536ea7d
feat(ir): expose intermediate representation module
HugoFreitass Jun 17, 2026
6750e3a
feat(ir): add TAC id generators
HugoFreitass Jun 17, 2026
2984e60
feat(ir): define TAC data structures
HugoFreitass Jun 17, 2026
7ee509b
feat(ir): format TAC instructions
HugoFreitass Jun 17, 2026
934fee7
test(ir): cover TAC primitives
HugoFreitass Jun 17, 2026
a7c4a49
style(ir): format TAC code
HugoFreitass Jun 17, 2026
76a771f
Merge pull request #146 from Bappoz/feat/issue23-IR-structure
Bappoz Jun 17, 2026
d0b04da
feat(ir): build CFG from TAC
Bappoz Jun 17, 2026
7798aa1
Merge pull request #147 from Bappoz/feat/issue25-cfg
HugoFreitass Jun 17, 2026
e22cc63
refactor(ir): allow copy destinations to be operands
HugoFreitass Jun 19, 2026
dea20f5
test(ir): update cfg copy destinations
HugoFreitass Jun 19, 2026
8be4749
feat(ir): add lowerer module skeleton
HugoFreitass Jun 19, 2026
b69a8b4
feat(ir): lower binary expressions
HugoFreitass Jun 19, 2026
09ca47f
feat(ir): lower unary expressions
HugoFreitass Jun 19, 2026
626362c
feat(ir): lower calls and casts
HugoFreitass Jun 19, 2026
40a904c
feat(ir): lower simple assignments
HugoFreitass Jun 19, 2026
afcbaa5
feat(ir): lower linear statements
HugoFreitass Jun 19, 2026
21abbdf
feat(ir): lower if statements
HugoFreitass Jun 19, 2026
9cb1928
feat(ir): lower while loops
HugoFreitass Jun 19, 2026
ac0d097
feat(ir): expose function and program lowering
HugoFreitass Jun 19, 2026
823a40e
feat(ir): track loop control labels
HugoFreitass Jun 19, 2026
795aebe
feat(ir): lower for and do while loops
HugoFreitass Jun 19, 2026
362997e
feat(ir): lower compound expressions
HugoFreitass Jun 19, 2026
a5192ac
test(ir): cover ast lowering
HugoFreitass Jun 19, 2026
6b6945d
Merge pull request #148 from Bappoz/feat/issue24-AST-lowering-to-TAC
Bappoz Jun 19, 2026
8f8cd74
test(integration): adicionar suíte de testes end-to-end com programas…
matheuslemesam Jun 19, 2026
df22d6c
feat(codegen): add x86-64 ABI and stack frame helpers
matheuslemesam Jun 19, 2026
0a804cf
feat(codegen): lower TAC to x86-64 assembly
matheuslemesam Jun 19, 2026
7fc41fe
feat(codegen): emit assembly from the CLI (-S/--emit-asm)
matheuslemesam Jun 19, 2026
539e7b1
test(codegen): cover assembly emission with gcc smoke tests
matheuslemesam Jun 19, 2026
aef4719
Merge pull request #149 from Bappoz/feat/integration-test-suite
Bappoz Jun 19, 2026
d3c4e76
feat(opt): implementar CSE local intra-bloco
Bappoz Jun 20, 2026
01cf55b
perf(parser): elimina clones O(n^2) no encadeamento postfix
matheuslemesam Jun 18, 2026
9687107
test(parser): cover deep member access chaining
matheuslemesam Jun 20, 2026
d33d023
fix(codegen): support calls with more than 6 integer arguments
Bappoz Jun 20, 2026
5dab498
Merge pull request #151 from Bappoz/feat/issue26-x86_64-codegen
Bappoz Jun 20, 2026
c4e5963
Merge pull request #152 from Bappoz/perf/issue86-postfix-by-value
Bappoz Jun 20, 2026
7cb6e40
feat(codegen): emite objeto ELF e linka executável via gcc
Bappoz Jun 20, 2026
5d4ba00
Merge pull request #150 from Bappoz/feat/issue135-cse
guxvr Jun 20, 2026
14b0a21
Merge pull request #153 from Bappoz/feat/issue130-elf-emission-linker
guxvr Jun 20, 2026
8cf752c
feat(ir): adiciona passes de otimização sobre o TAC — constant foldin…
guxvr Jun 20, 2026
1752ec1
limpando cargo clippy
guxvr Jun 20, 2026
607efe3
correções na formatação
guxvr Jun 20, 2026
c3c9f11
fix(ir): liveness/DCE agora respeita fluxo de controle
Bappoz Jun 21, 2026
4ee3114
fix(ci): corrige lint clippy collapsible_match em split_into_blocks
Bappoz Jun 21, 2026
a870a3d
Merge pull request #154 from Bappoz/issue133-tac-optimizations
Bappoz Jun 21, 2026
68266ba
feat(opt): implementa copy propagation e constant propagation no TAC
Bappoz Jun 22, 2026
552ed31
Merge pull request #158 from Bappoz/feat/issue136-copy-and-const-prop…
guxvr Jun 23, 2026
9d96cef
fix: remove lowering and backend panics
Bappoz Jun 23, 2026
7c11a57
feat: adicionei flags de compilação do arquivo onde voce consegue setar
Bappoz Jun 23, 2026
b8ba8d6
feat(stdlib): suporte minimo a stdbool.h e printf via stdio.h
Bappoz Jun 23, 2026
6461906
feat/ add function run: search back-edges
Phill-Chill Jun 23, 2026
61a1fd2
feat/add function compute_dominators: search and save dominators blocks
Phill-Chill Jun 23, 2026
fc105a1
feat/ add function get_lopp_body: search and save block that makes pa…
Phill-Chill Jun 23, 2026
eab651d
Merge pull request #166 from Bappoz/feat/issue165-suporte-stdbool-e-s…
guxvr Jun 23, 2026
dd16fe9
Merge remote-tracking branch 'origin/developer' into fix/159-no-panic…
Bappoz Jun 23, 2026
b0a3de2
Merge pull request #164 from Bappoz/fix/159-no-panic-lowering-codegen
guxvr Jun 23, 2026
9b12eb4
feat: implement semantic validation for subset C (Issue #160)
guxvr Jun 23, 2026
e0ae497
feat/add funtions compute_invariants and is_operand_stable: invariant…
Phill-Chill Jun 23, 2026
a0ec542
Merge branch 'origin/developer' into issue-160-minimal-semantic-valid…
guxvr Jun 23, 2026
2a1b2da
style: fix code formatting after merge
guxvr Jun 23, 2026
0823e9e
feat/LICM implementation
Phill-Chill Jun 23, 2026
24dade3
fix: do not treat semantic warnings as fatal compile errors
Bappoz Jun 23, 2026
188ed17
Merge pull request #167 from Bappoz/issue-160-minimal-semantic-valida…
Bappoz Jun 23, 2026
6bad6b5
feat: adiciona lógica da otimização peephole e 5 padrões
Phill-Chill Jun 23, 2026
a3d1c70
feat: aplica a otimização peephole no final da geração de assembly
Phill-Chill Jun 23, 2026
3052380
test: adiciona testes unitários para a passagem peephole
Phill-Chill Jun 23, 2026
550843f
fix: corrigir lints de clippy e formatação em licm.rs
Bappoz Jun 24, 2026
68d79dc
Merge pull request #168 from Bappoz/feat/issue137-Loop-Invariant-Code…
Bappoz Jun 24, 2026
a17d913
Merge remote-tracking branch 'origin/developer' into feat/issue138-pe…
Bappoz Jun 24, 2026
6db484f
fix: corrigir lint de clippy (new_without_default) e formatação após …
Bappoz Jun 24, 2026
7d23a03
Merge pull request #169 from Bappoz/feat/issue138-peephole-in-generat…
Bappoz Jun 24, 2026
15c6118
test(e2e): cobrir blocos, if/else, while, for, do-while e recursão em…
Bappoz Jun 24, 2026
1a4c574
feat(examples): adicionar programa-demo para a apresentação final
Bappoz Jun 24, 2026
604c149
feat(ir): implementar lowering de switch/case
Bappoz Jun 24, 2026
8fcbb82
feat(codegen): implementar address-of (&x) e deref de leitura (*p) no…
Bappoz Jun 24, 2026
2bb21da
feat(ir,codegen): suportar atribuicao via deref de ponteiro (*p = x)
Bappoz Jun 24, 2026
f28578b
feat(ir): suportar sizeof(expr) para identificadores simples
Bappoz Jun 24, 2026
10fb76e
feat(ir): suportar indexacao via ponteiro (p[i], leitura e escrita)
Bappoz Jun 24, 2026
d703aff
refactor(codegen): generalizar Frame para slots de tamanho variavel
Bappoz Jun 24, 2026
e111321
feat(ir,codegen): suportar acesso a membro de struct (s.campo, p->campo)
Bappoz Jun 24, 2026
3dfbabf
feat(ir): represent global variables in TAC
HugoFreitass Jun 24, 2026
355f880
feat(lowering): lower global variable declarations
HugoFreitass Jun 24, 2026
4af48b6
fix(codegen): keep globals out of stack frames
HugoFreitass Jun 24, 2026
76a9541
feat(codegen): emit global storage and RIP-relative access
HugoFreitass Jun 24, 2026
4f188b0
fix(optimizer): preserve global variable assignments
HugoFreitass Jun 24, 2026
f4a75ae
test(codegen): initialize globals in TAC smoke fixtures
HugoFreitass Jun 24, 2026
e5f6d11
test(codegen): cover global variable execution
HugoFreitass Jun 24, 2026
cde93e8
Merge branch 'developer' into feat/issue163-demo-program
HugoFreitass Jun 24, 2026
fd3e17b
Merge pull request #171 from Bappoz/feat/issue163-demo-program
HugoFreitass Jun 24, 2026
3885e41
Merge branch 'developer' into feat/issue161-e2e-test-suite
HugoFreitass Jun 24, 2026
bf0df9a
feat(types): preserve fixed array sizes across frontend
guxvr Jun 24, 2026
2540973
feat(ir): support fixed-size arrays in lowering
guxvr Jun 24, 2026
e1b7577
fix(tests): restore smoke coverage after merge
HugoFreitass Jun 24, 2026
dfcb526
test: cover fixed-size array parsing and codegen
guxvr Jun 24, 2026
8172027
Merge pull request #170 from Bappoz/feat/issue161-e2e-test-suite
HugoFreitass Jun 24, 2026
f572502
Merge pull request #176 from Bappoz/issue-173-indexacao-array-fixo
Phill-Chill Jun 24, 2026
02bfd7f
Merge branch 'developer' into feat/issue174-codegen-global-variables
Phill-Chill Jun 25, 2026
b22aced
corrige erro de formatação em lower.rs
guxvr Jun 25, 2026
a3b6be5
Merge pull request #175 from Bappoz/feat/issue174-codegen-global-vari…
guxvr Jun 25, 2026
ff2b0d9
docs: alinha README com estado real do compilador, adiciona INSTALL e…
Bappoz Jun 25, 2026
96aff0a
Merge pull request #177 from Bappoz/docs/issue162-readme-install-tester
guxvr Jun 25, 2026
a4e4b25
feat(ir): adiciona campo de tipo as instrucoes TAC (Issue #172)
Phill-Chill Jun 25, 2026
9c1c984
feat(codegen): implementa suporte a double e registradores XMM (Issue…
Phill-Chill Jun 25, 2026
381a4dc
test(ir): adiciona suite de testes para tipagem no TAC (Issue #172)
Phill-Chill Jun 25, 2026
30b6b5e
fix(codegen): corrige e completa suporte a double iniciado na branch …
Bappoz Jun 25, 2026
008a1d2
Merge remote-tracking branch 'origin/developer' into feat/issue172-fl…
Bappoz Jun 25, 2026
0ac1684
Merge pull request #178 from Bappoz/feat/issue172-float/double-suppor…
Phill-Chill Jun 25, 2026
ed5c0c7
fix: corrigi todas as documentacoes com as novas atualziacoes
Bappoz Jun 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# INSTALL — preparando o ambiente

Guia para deixar o ambiente pronto para compilar e rodar o Crusty.

## Pré-requisitos

| Ferramenta | Versão mínima | Para quê |
|---|---|---|
| [Rust](https://rustup.rs/) (rustc + cargo) | 1.70+ | Compilar o próprio Crusty |
| `gcc` | qualquer versão recente | Montar (`as`) e linkar (`ld`) os executáveis ELF gerados pelo backend x86-64 |
| Linux x86-64 | — | O backend gera assembly x86-64 / System V ABI. Não há suporte a outras arquiteturas ou a Windows/macOS nativo |

Sem `gcc` no `PATH`, o compilador ainda funciona até a emissão de assembly (`--emit=asm`), mas os testes de smoke e2e (`tests/exe_smoke_test.rs`, `tests/codegen_smoke.rs`, `tests/double_codegen_test.rs`) são automaticamente pulados (skip), e `--emit=obj`/`--emit=exe` falham.

## 1. Instalar o Rust

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup update stable
```

Verifique:

```bash
rustc --version # esperado: 1.70 ou mais recente
cargo --version
```

## 2. Instalar o gcc (toolchain de montagem/link)

**Debian/Ubuntu**
```bash
sudo apt update && sudo apt install -y gcc
```

**Arch/Manjaro**
```bash
sudo pacman -S gcc
```

**Fedora**
```bash
sudo dnf install gcc
```

Verifique:

```bash
gcc --version
```

## 3. Obter o código

```bash
git clone https://github.com/Bappoz/Crusty.git
cd Crusty
```

(Se você já está dentro do repositório, pule esta etapa.)

## 4. Compilar o projeto

```bash
cargo build --release
```

O binário fica em `target/release/crusty`. Para um build de desenvolvimento (mais rápido de compilar, binário mais lento):

```bash
cargo build
# binário em target/debug/crusty
```

## 5. Verificar a instalação

Rode o compilador sobre um exemplo incluso no repositório e execute o binário gerado:

```bash
cargo run --release -- src/examples/hello_world.c -o /tmp/hello
/tmp/hello
```

Saída esperada:

```
Hello, World!
```

Se isso funcionou, o ambiente está pronto. Para confirmar que toda a suíte de testes passa no seu ambiente:

```bash
cargo test --all
cargo clippy -- -D warnings
cargo fmt --check
```

Essas três checagens são exatamente as que o CI (`.github/workflows/`) roda em todo push/PR para `developer` e `master`.

## Problemas comuns

- **`error: linker 'cc' not found` ou falha ao montar/linkar** — `gcc` não está instalado ou não está no `PATH`. Repita o passo 2.
- **`cargo: command not found`** depois de instalar o Rust — rode `source "$HOME/.cargo/env"` ou abra um novo terminal.
- **Testes de smoke "pulando" silenciosamente** — esperado se `gcc` não estiver disponível; veja [TESTER.md](TESTER.md) para detalhes.
- **Programa de teste usa `float`** e falha com `error: code generation` — `float` ainda não tem codegen (limitação conhecida do backend, ver [README.md](README.md#limitações-conhecidas) e [issue #172](https://github.com/Bappoz/Crusty/issues/172)); `double` já é suportado.
120 changes: 60 additions & 60 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
# Crusty — Compilador C em Rust

Projeto da disciplina de Compiladores 1. Implementa um compilador para um subconjunto da linguagem C, escrito em Rust.
Projeto da disciplina de Compiladores 1. Implementa um compilador para um subconjunto da linguagem C, escrito em Rust, com backend nativo x86-64 (System V ABI, Linux).

## Estágio atual

| Fase | Status |
|------|--------|
| Análise léxica | Completo |
| Análise sintática | Completo |
| Análise semântica | Em desenvolvimento |
| Geração de código | Não iniciado |
| Análise semântica | Completo |
| IR (TAC) | Completo |
| Otimizações (CSE, DCE, constant folding, copy propagation, LICM, inlining) | Completo |
| Geração de código x86-64 | Completo para tipos inteiros, ponteiros, structs, arrays, globais e `double` (registradores XMM) |

### Limitações conhecidas

- **`float` não tem codegen.** `double` já é suportado pelo backend x86-64 (registradores XMM, issue [#172](https://github.com/Bappoz/Crusty/issues/172)), mas `float` ainda não — o analisador semântico aceita e tipa `float`, mas o backend ainda não emite o código correspondente. Programas que usam `float` falham com `error: code generation` no estágio final; use `double` no lugar.
- O modo REPL interativo (executar `crusty` sem argumentos) não está implementado.
- `--dump-ir` ainda não imprime a IR (placeholder).

Fora isso, o pipeline completo (lexer → parser → análise semântica → IR → otimizações → assembly x86-64 → executável ELF via `gcc`) funciona ponta a ponta para um subconjunto relevante de C: tipos inteiros, `char` e `double`, ponteiros, structs, arrays de tamanho fixo, enums, typedefs, variáveis globais, todas as estruturas de controle (`if`/`while`/`do-while`/`for`/`switch`) e chamadas de função.

## Estrutura do projeto

Expand All @@ -18,43 +28,54 @@ src/
├── lexer/ Análise léxica — transforma código-fonte em tokens
├── parser/ Análise sintática — constrói a AST via Pratt parsing
├── analyser/ Análise semântica — tabela de símbolos, escopos, verificação de tipos
├── codegen/ Geração de código — esqueleto (não implementado)
├── ir/ Geração e lowering da IR intermediária (TAC)
├── codegen/ Geração de código — otimizações sobre TAC (inter/) e backend x86-64 (last/)
├── common/ Estruturas compartilhadas: AST, erros, spans, utilitários
├── examples/ Arquivos .c de exemplo usados em testes e demonstrações
└── tests/ Testes unitários por módulo
tests/ Testes de integração e smoke tests (ponta a ponta, com gcc)
docs/ Documentação técnica de cada fase do compilador
```

## Pré-requisitos
## Começando

- [Rust](https://rustup.rs/) 1.70+
Instruções completas de instalação e configuração do ambiente (Rust, `gcc`, verificação de toolchain) estão em [INSTALL.md](INSTALL.md).

Resumo rápido:

```bash
rustup update stable
cargo build --release
cargo run --release -- src/examples/hello_world.c
./hello_world
```

## Build
## Uso

```bash
cargo build
crusty [flags] <arquivo>
```

## Uso
Principais flags (lista completa em `crusty` sem argumentos):

Rodar o compilador sobre um arquivo de entrada:

```bash
cargo run -- <arquivo>
```
| Flag | Efeito |
|---|---|
| `--dump-tokens` | Lista os tokens emitidos pelo lexer |
| `--dump-ast` | Imprime a AST |
| `--only-lex` / `--only-parse` / `--only-semantic` | Para o pipeline no estágio indicado |
| `-S`, `--emit-asm` / `--emit=asm` | Para após emitir o assembly x86-64 (`.s`) |
| `--emit=obj` | Para após montar o objeto (`.o`), sem linkar |
| `--emit=exe` | Monta e linka um executável ELF rodável (padrão) |
| `-o <arquivo>`, `--out-dir <dir>`, `--out-name <nome>` | Controlam o caminho/nome de saída |
| `-O0`\|`-O1`\|`-O2`\|`-O3`, `--opt-level <n>` | Nível de otimização aplicado à IR |

Exemplo:
Exemplo gerando e executando um binário:

```bash
cargo run -- input.c
cargo run --release -- src/examples/simple.c -o /tmp/simple
/tmp/simple; echo "exit: $?"
```

O compilador imprime os tokens reconhecidos, a AST e eventuais diagnósticos de erro.

> O modo REPL interativo (sem argumentos) ainda não está implementado.

## Funcionalidades implementadas

**Lexer**
Expand All @@ -81,60 +102,39 @@ O compilador imprime os tokens reconhecidos, a AST e eventuais diagnósticos de
- Promoção numérica implícita (Double > Float > Long > Int)
- Detecção de atribuição a `const`

## Testes
**IR e otimizações**
- Lowering de AST para TAC (Three-Address Code), incluindo arrays fixos, structs e globais
- Pipeline de otimização configurável por nível (`-O0`..`-O3`): constant folding, common subexpression elimination, dead code elimination, copy propagation, loop-invariant code motion, inlining

### Todos os testes unitários
**Backend x86-64**
- Convenção de chamada System V ABI (inteiros/ponteiros em `rdi`..`r9`/`rax`, `double` em `xmm0`..`xmm7`)
- Endereço de variáveis, indexação de array, acesso a membro de struct (`.`, `->`), address-of/deref
- Aritmética, comparações e literais de `double` via registradores XMM (`addsd`/`subsd`/`mulsd`/`divsd`/`ucomisd`)
- `sizeof` em tempo de compilação
- Variáveis globais com acesso RIP-relative
- Peephole optimizer sobre o assembly emitido
- Emissão de `.s`, montagem de `.o` e link de executável via `gcc`

```bash
cargo test
```
## Testes

### Filtrar por módulo
Cobertura completa (testes unitários e testes com arquivos `.c` reais, executados de ponta a ponta) está documentada em [TESTER.md](TESTER.md).

```bash
cargo test lexical # testes do scanner/lexer (21 casos)
cargo test parser_test # testes do parser / AST (76 casos)
cargo test semantic_test # testes do analisador semântico (21 casos)
cargo test symbol_test # testes da tabela de símbolos (11 casos)
cargo test analyzer_test # testes de integração do analisador (3 casos)
cargo test source # testes de SourceFile e spans (12 casos)
cargo test lexer_file # testes do scanner lendo arquivos (7 casos)
cargo test parser_file # testes do parser lendo arquivos (4 casos)
cargo test literals # testes de literais numéricos (4 casos)
cargo test ast_errors # testes de erros de AST (4 casos)
cargo test token # testes de tokens individuais (2 casos)
```

### Com saída detalhada
Resumo rápido:

```bash
cargo test -- --nocapture
cargo test --all # ~361 testes (unitários + integração + smoke e2e)
cargo clippy -- -D warnings
cargo fmt --check
```

### Módulos de teste

| Arquivo | Cobertura | Testes |
|---|---|---|
| `src/tests/lexical_test.rs` | Scanner: operadores, palavras-chave, literais | 21 |
| `src/tests/parser_test.rs` | Parser / construção de AST | 76 |
| `src/tests/semantic_test.rs` | Verificação de tipos, undefined vars, const | 21 |
| `src/tests/symbol_test.rs` | Tabela de símbolos, escopos, redeclaração | 11 |
| `src/tests/source_test.rs` | `SourceFile`, `ByteSpan`, posicionamento | 12 |
| `src/tests/lexer_file_test.rs` | Scanner sobre arquivos reais | 7 |
| `src/tests/parser_file_test.rs` | Parser sobre arquivos reais | 4 |
| `src/tests/literals_test.rs` | Literais inteiros, floats, strings | 4 |
| `src/tests/ast_errors.rs` | Diagnósticos e erros de AST | 4 |
| `src/tests/analyzer_test.rs` | Integração léxico → sintático → semântico | 3 |
| `src/tests/token_test.rs` | `Token` e `TokenKind` | 2 |

**Total: 165 testes**

## Documentação técnica

- [Lexer](docs/lexer.md) — scanner, tokens, erros léxicos
- [Parser](docs/parser.md) — Pratt parser, AST, recuperação de erros
- [Analisador Semântico](docs/semantic.md) — tabela de símbolos, verificação de tipos
- [Precedência de Operadores C](docs/c_operator_precedence.md) — tabela C11 e mapeamento para binding powers
- [INSTALL.md](INSTALL.md) — como preparar o ambiente e compilar o projeto
- [TESTER.md](TESTER.md) — como rodar e interpretar todos os testes

## Contribuidores

Expand Down
Loading
Loading