Skip to content

Commit ddc806a

Browse files
committed
docs(readme): finalizar documentacao
1 parent 168b9b4 commit ddc806a

File tree

7 files changed

+135
-281
lines changed

7 files changed

+135
-281
lines changed

README.md

Lines changed: 62 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,45 @@
22

33
Objetivo: construir um compilador que lê um subconjunto de C e transpila para Lua, usando Flex (léxico) e Bison (sintático) em C.
44

5-
Resumo do MVP de linguagem suportada:
6-
- Tipos: int, float, bool (true/false), char (como número), string opcional.
7-
- Estruturas: declaração de variáveis, atribuição, expressões aritméticas/lógicas, if/else, while, for (apenas uma declaração), função (definição/chamada) e return.
8-
- I/O: mapeamento simples printf/puts -> print; scanf opcional.
5+
Resumo das funcionalidades suportadas:
6+
- Tipos: int, float, bool (true/false), char (como número), string literal (printf e puts), array unidimensional dos tipos primitivos anteriores.
7+
- Estruturas: declaração de variáveis, atribuição, expressões aritméticas/lógicas, if/else, while, for (apenas uma declaração de variável), função (definição/chamada) e return.
8+
- I/O: mapeamento simples printf/puts -> print com formatação;
99
- Saída Lua: usar local para variáveis, funções Lua equivalentes, operadores com mesma semântica; arrays opcionais como tabelas.
10+
- Extra: otimizações simples (constantes, dead code, reutilização de subexpressão comum, condição falsa/verdadeira em tempo de compilação).
1011

1112
O que não será suportado:
12-
- Ponteiros, structs, alocação dinâmica, manipulação de memória.
13+
- Ponteiros (incluindo string), structs, alocação dinâmica, manipulação de memória.
1314
- Recursos avançados: pré-processador, macros, diretivas de compilação.
15+
- Recursos complexos: manipulação de bits, operações em baixo nível, inline assembly.
16+
17+
## Arquitetura
18+
19+
O compilador é dividido em várias fases principais:
20+
1. **Análise Léxica**: Utiliza Flex para tokenizar o código-fonte em C.
21+
2. **Análise Sintática**: Utiliza Bison para enviar à fase seguinte uma árvore sintática.
22+
3. **Intermediária**: Representação da AST (Árvore de Sintaxe Abstrata) para facilitar a análise semântica e otimizações.
23+
4. **Análise Semântica**: Verifica tipos, escopos e outras regras semânticas.
24+
5. **Otimizações**: Aplica otimizações simples na AST.
25+
6. **Geração de Código**: Transpila a AST otimizada para código Lua.
26+
27+
## Estrutura do Projeto
1428

1529
```
1630
.
17-
├── lexer/ # regras léxicas (lexer.l)
18-
├── parser/ # gramática e ações (parser.y)
19-
├── src/ # main.c, AST, tabela de símbolos, gerador Lua
31+
├── src/ # Implementação do compilador propriamente dita
32+
│ ├── lexer.* # Regras Flex e helpers de tokenização
33+
│ ├── parser.y # Gramática Bison que constrói a AST
34+
│ ├── ast.* # Tipos da AST e utilitários de construção/cleanup
35+
│ ├── symbol_table.* # Estruturas de escopo usadas na análise semântica
36+
│ ├── semantic.* # Verificações de tipo/uso que anotam a AST
37+
│ ├── optimizer.* # Passes locais (CSE, DCE, eliminação de código morto)
38+
│ ├── codegen_lua.* # Emissão de Lua a partir da AST anotada
39+
│ └── main.c # Entrada do programa: orquestra todas as fases
2040
├── tests/
21-
│ ├── pass/ # casos que devem passar
22-
│ └── fail/ # casos que precisam falhar
23-
└── Makefile
41+
│ ├── pass/ # Pares C/Lua que devem equivaler
42+
│ └── fail/ # Exemplos que precisam produzir erro com .err esperado
43+
└── Makefile # Alvo único que compila/roda suite de testes
2444
```
2545

2646
## Ambiente de Desenvolvimento
@@ -51,17 +71,42 @@ make
5171

5272
# Testes
5373

54-
A pasta `tests/` está organizada em:
55-
- `tests/semantic/pass`: casos que devem gerar Lua válido e executar com sucesso;
56-
- `tests/semantic/fail`: casos que precisam falhar na análise semântica (arquivos `.err` com a mensagem esperada);
74+
A pasta `/tests/` está organizada em:
75+
- `/tests/pass/`: códigos em C e seus respectivos códigos Lua esperados;
76+
- `/tests/fail/`: códigos em C que devem gerar erros, com seus respectivos arquivos `.err` contendo mensagens esperadas;
5777

58-
Execute as suítes pelo Makefile:
78+
Para rodar os testes, utilize o comando:
5979

6080
```bash
61-
make test # verifica os smoke tests (tradução direta C -> Lua)
81+
make test
6282
```
6383

64-
Os golden files utilizam o mesmo nome-base do arquivo `.c`, com extensão `.lua` (para PASS) ou `.golden`/`.err` (para FAIL).
84+
## Cobertura
85+
86+
Válido (deve passar):
87+
- `arrays.c`: criação, atribuição e leitura em arrays unidimensionais.
88+
- `arith.c`: operações aritméticas básicas e precedência.
89+
- `effect.c`: garante que efeitos colaterais em chamadas/expressões sejam preservados.
90+
- `dead_variable.c`: declarações inutilizadas são removidas sem afetar o resto.
91+
- `char.c`: manipulação de caracteres tratados como inteiros.
92+
- `logic.c`: operadores lógicos e conversões implícitas para booleano.
93+
- `printf.c`: mapeamento de `printf`/`puts` para `print` com formatação.
94+
- `cse.c`: reutilização de subexpressões constantes via temporários.
95+
- `if.c`: condicionais simples.
96+
- `while.c`: laços `while` com updates no corpo.
97+
- `variable.c`: declarações/atribuições básicas com tipos primitivos.
98+
- `deadcode.c`: remoção de código após `return`.
99+
- `for.c`: laço `for` com init/condição/post traduzido para `while` Lua.
100+
- `expressions.c`: combinações de chamadas de função e expressões compostas.
101+
102+
Inválido (deve falhar):
103+
- `bad_if.c`: `if` com condição inválida sinaliza erro sintático/semântico.
104+
- `wrong_assign.c`: incompatibilidade de tipos em atribuições.
105+
- `array_index_string.c`: índice de array usando string gera erro de tipo.
106+
- `int_plus_string.c`: soma entre inteiro e string não é permitida.
107+
- `scope_error.c`: detecção de variáveis fora de escopo.
108+
- `testes.c`: string sendo atribuida em variável int gera erro.
109+
- `missing_return.c`: função sem `return` obrigatório reporta erro.
65110

66111
# Membros
67112

docs/Apresentação.md

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,51 @@
1-
## Introdução
1+
## Introdução (João)
22

3-
- (motivos e objetivos...)
3+
- Motivação: facilitar correções em tempo de execução migrando C educacional para Lua.
4+
- Objetivo: demonstrar pipeline completa (léxico → código Lua) com subconjunto controlado de C.
5+
- Escopo: sem ponteiros/structs; foco em tipos primitivos, controle de fluxo e funções simples.
46

5-
## Léxico
7+
## Léxico (João)
68

7-
- Tokens...
8-
- Símbolos...
9+
- Categoria de tokens: palavras-chave, identificadores, números, strings, operadores e delimitadores.
10+
- Estratégia: estados do Flex para distinguir comentários, literais e tratamento de whitespace.
11+
- Símbolos especiais: rastreamento de linha/coluna para diagnósticos.
912

10-
## Sintático
13+
## Sintático (Sophia)
1114

12-
- Dos tokens para regras gramaticais...
13-
- Árvore sintática abstrata (AST)...
14-
- Análise de escopo...
15-
- Tabela de símbolos...
15+
- Gramática LL(1)/LR: regras Bison para declarações, expressões e blocos.
16+
- Resolução de conflitos: preferência por shift para "dangling else" documentada.
17+
- Produção da AST: ações semânticas instanciam nós e anexam comentários de posição.
1618

17-
## Semântico
19+
## Intermediário (Marco)
1820

19-
- Regras semânticas...
21+
- AST: nós para expressões, statements, blocos e funções.
22+
- Tabela de símbolos hierárquica: pilha de escopos para variáveis/arrays/funções.
23+
- Vínculo entre symbol e AST: cada símbolo mantém ponteiro para declaração para otimizações.
2024

21-
### Geração de código Lua
25+
## Semântico (Lívia)
2226

23-
### Ambiguidades
27+
- Verificação de tipos: coercões permitidas int↔float/char; proíbe aritmética com string/bool.
28+
- Regras de uso: variáveis precisam ser declaradas antes, arrays apenas com índice inteiro.
29+
- Funções: assinatura registrada, verifica retorno obrigatório e número/tipo de argumentos.
30+
31+
## Geração de código Lua (André)
32+
33+
- Blocos C → "do ... end" preservando escopo.
34+
- Variáveis em C ↔ `local` Lua; arrays como tabelas sequenciais.
35+
- `printf/puts` convertidos para `print` com `string.format`; laços `for` traduzidos para `while`.
36+
37+
## Ambiguidades
2438

2539
- Compiladores precisam estar 100% corretos sobre a estrutura do código fonte.
2640
- Ao mesmo tempo, eles não podem demandar mais contexto do que o necessário para entregar um resultado.
2741
- Léxico: Array vs. operador de indexação...
2842
- Sintático: Dangling else...
2943
- Semântico: Tipagem fraca (Lua) vs. tipagem forte (C)...
44+
- Semântico adicional: comportamento de `bool` em Lua (0 é truthy) vs. C (0 falsy) tratado ao gerar código.
45+
46+
## Otimizações (João)
3047

31-
### Otimizações
48+
- Propagação de constantes e simplificações triviais.
49+
- Common Subexpression Elimination insere temporários quando ganho é positivo.
50+
- Dead Code Elimination remove declarações não usadas e statements após `return` mantendo efeitos colaterais.
51+
- Avaliação de condições em tempo de compilação elimina ramos inatingíveis.

docs/Escopo.md

Lines changed: 0 additions & 98 deletions
This file was deleted.

0 commit comments

Comments
 (0)