|
1 | | -## Sprint 3 (D21–D30) — AST, símbolos e semântica básica |
| 1 | +## Sprint 3 (D21–D40) — AST, símbolos e semântica básica |
2 | 2 |
|
3 | 3 | ### Núcleo semântico unificado: definir AST (expr/stmt/decl/fun), tabela de símbolos com escopos, checagem/conversão int↔float e mensagens de erro com linha/coluna |
4 | 4 |
|
5 | | - - [ ] responsáveis: @Sophiassilva |
| 5 | + - [x] responsáveis: @Sophiassilva |
6 | 6 | - **Entregáveis obrigatórios:** |
7 | 7 | - `src/ast.h` / `src/ast.c` com a hierarquia de nós (expressões, comandos, declarações, funções) e utilitários de criação/destruição. |
8 | 8 | - `src/symbol_table.h` / `src/symbol_table.c` com pilha de escopos (funções para `enter_scope`, `leave_scope`, `insert_symbol`, `lookup`). |
|
25 | 25 | - **Promoção numérica:** `float y = 2 + 3.5;` deve produzir um nó Binário cujo resultado tem `TYPE_FLOAT`, convertendo o `2` para `2.0` automaticamente. |
26 | 26 | - **Mensagem de erro rica:** `Erro [5:3]: variável 'z' não declarada; escopo atual possui {x, y}.` |
27 | 27 |
|
28 | | -### Suporte sintático essencial: declarações, atribuições, blocos, if/else, while/for, curto-circuito lógico e comparações (==, \!=, \<, \<=, \>, \>=) |
| 28 | +### Suporte sintático essencial: declarações, atribuições, blocos, if/else, while/for, lógico e comparações (==, \!=, \<, \<=, \>, \>=) |
29 | 29 |
|
30 | | - - [ ] responsáveis: @marcomarquesdc |
| 30 | + - [x] responsáveis: @marcomarquesdc |
31 | 31 | - **Entregáveis obrigatórios:** |
32 | 32 | - Regras no `src/parser.y` cobrindo: |
33 | 33 | - Declaração de variáveis (com inicialização opcional) e de vetores 1D. |
34 | 34 | - Atribuições simples e compostas (ex.: `+=`, se decidirmos suportar, documentar). |
35 | 35 | - Blocos `{ ... }` com criação/destruição de escopo. |
36 | 36 | - Estruturas de controle `if/else`, `while`, `for (init; cond; step)` e `do ... while`. |
37 | | - - Operadores lógicos com curto-circuito (`&&`, `||`) e comparações. |
| 37 | + - Operadores lógicos (`&&`, `||`) e comparações. |
38 | 38 | - Ações semânticas que instanciam nós da AST definidos na tarefa anterior. |
39 | 39 | - Atualização dos tokens na `src/lexer.l` se novos operadores forem necessários (ex.: `<=`, `>=`, `!=` já existem; avaliar `+=`, `-=` etc.). |
40 | 40 | - Casos de teste em `tests/syntax/` validando cada construção (happy path + caso de erro por falta de `;`). |
|
43 | 43 | - Reutilizar a regra `program` para aceitar múltiplas declarações e funções. |
44 | 44 | - Garantir que `for` seja reescrito em AST como um nó com três componentes (init/cond/update) e um corpo `Block`. |
45 | 45 | - Incluir ações de `yyerror` informando token esperado, aproveitando localizações. |
46 | | - - **Exemplo alvo:** além do snippet abaixo, teste `for` com incremento, e `if` aninhados com `&&`/`||` para confirmar curto-circuito. |
| 46 | + - **Exemplo alvo:** além do snippet abaixo, teste `for` com incremento, e `if` aninhados com `&&`/`||`. |
47 | 47 | ```c |
48 | 48 | int i = 0; |
49 | 49 | for (; i < 5 && i != 3; i = i + 1) { |
|
57 | 57 |
|
58 | 58 | ### Análise Semântica: missão Lua abrangente: variáveis locais, expressões, operadores lógicos, arrays 1D como tabelas, mapeamento de printf/puts, helpers de runtime quando necessário |
59 | 59 |
|
60 | | - - [ ] responsáveis: @Liviarodrigues1 |
| 60 | + - [x] responsáveis: @Liviarodrigues1 |
61 | 61 | - **Entregáveis obrigatórios:** |
62 | | - - Módulo `src/semantics.c` com passagens sobre a AST para checar tipos, resolver identificadores e anotar cada nó com tipo final. |
63 | 62 | - Implementação das regras de promoção (int→float, char→int, bool→int quando permitido) e erros quando a combinação é inválida (`int + string`, `if` com expressão não booleana, etc.). |
64 | 63 | - Representação de arrays como vetores Lua (`{}`) incluindo deslocamento +1 no índice. |
65 | 64 | - Funções helper em `runtime/printf.lua` ou similar para cobrir `printf`/`puts` e conversões básicas. |
66 | 65 | - Relatório de semântica (ex.: `docs/relatorios/semantica_sprint3.md`) com casos validados e conhecidos a resolver. |
67 | 66 | - **Passos sugeridos:** |
68 | 67 | - Percorrer a AST pós-parsing: primeiro declaração de variáveis/funções, depois corpo. |
69 | 68 | - Armazenar em cada nó `AstExpression` os campos `type` e flags (`is_const`, `is_lvalue`). |
70 | | - - Sempre que gerar Lua, garantir que `&&` e `||` se tornem `and`/`or` e mantenham curto-circuito (uso direto já atende). |
| 69 | + - Sempre que gerar Lua, garantir que `&&` e `||` se tornem `and`/`or`. |
71 | 70 | - Para arrays, converter `arr[i]` em `arr[i + 1]` no código gerado. |
72 | 71 | - Incluir testes: `tests/semantic/pass/*.c` (sem erros) e `tests/semantic/fail/*.c` (erro esperado com golden file da mensagem). |
73 | 72 | - **Exemplos ampliados de tradução C → Lua:** |
|
81 | 80 | local arr = {10, 20, 30} |
82 | 81 | arr[2] = 99 |
83 | 82 | ``` |
84 | | - - **Curto-circuito com ponteiros simulados:** |
85 | | - ```c |
86 | | - if (ptr != NULL && ptr->val > 10) { log(ptr->val); } |
87 | | - ``` |
88 | | - ↓ |
89 | | - ```lua |
90 | | - if ptr ~= nil and ptr.val > 10 then |
91 | | - log(ptr.val) |
92 | | - end |
93 | | - ``` |
94 | 83 | - **Mapeamento de `printf`:** |
95 | 84 | ```c |
96 | 85 | printf("Valor: %d e %f\n", a, b); |
|
102 | 91 |
|
103 | 92 | ### Funções completas: traduzir assinaturas e return de C para function Lua, preservar escopos e chamadas |
104 | 93 |
|
105 | | - - [ ] responsáveis: @BeyondMagic |
| 94 | + - [x] responsáveis: @BeyondMagic |
106 | 95 | - **Entregáveis obrigatórios:** |
107 | 96 | - Tradução de declarações de função para AST (`AstFunction`) com lista de parâmetros, tipo de retorno e bloco corpo. |
108 | 97 | - Geração Lua correspondente em `src/codegen_lua.c` (novo arquivo) ou módulo existente, incluindo: |
|
140 | 129 |
|
141 | 130 | ### Garantia de qualidade: testes de semântica (erros de escopo/tipo), golden files de erro, pipeline end-to-end (C → Lua → execução), linemap/diagnóstico e atualização de docs/demo |
142 | 131 |
|
143 | | - - [ ] responsáveis: @andrelopesdesousa |
| 132 | + - [x] responsáveis: @andrelopesdesousa |
144 | 133 | - **Entregáveis obrigatórios:** |
145 | 134 | - Estrutura de testes automatizados: |
146 | 135 | - `tests/semantic/pass/*.c` + `.lua` esperados. |
|
0 commit comments