Skip to content

Etapa 3: analisador semântico (AP 2) em Python e em C - #1

Merged
gblsun merged 5 commits into
mainfrom
etapa3-analisador-semantico
Oct 10, 2026
Merged

gblsun merged 5 commits into
mainfrom
etapa3-analisador-semantico

Conversation

@gblsun

@gblsun gblsun commented Oct 10, 2026

Copy link
Copy Markdown
Owner

Resumo

Implementa o analisador semântico da AP 2, nas duas linguagens, com cada componente em arquivos separados, como pedem as orientações de entrega:

  • Tabela de símbolos (tabela_simbolos.py / tabela_simbolos.c): uma pilha de escopos com sombreamento.
  • Analisador semântico (semantico.py / semantico.c), em duas passagens:
    • nomes e escopos;
    • tipos e conversões (int → float, char → int);
    • vetores, chamadas e retornos, incluindo retorno em todos os caminhos;
    • condições e o contexto de break/continue.
  • Diagnósticos: SEM001–SEM013 com o texto exato do gabarito oficial. Acrescenta SEM014 (categoria), SEM015 (divisor constante zero) e SEM016 (tamanho e limites de vetor).
  • Pontos de entrada: minic.py e minic.c na raiz, que é como os scripts testes_semanticos_{py,c}.sh chamam.
  • Saída: reproduz os bytes do gabarito (CRLF entre as linhas, sem quebra no fim), porque o script compara com diff exato. O pacote oficial está marcado como -text no .gitattributes.
  • Parser: ganhou a opção destino_generico, usada só no pipeline semântico, para 3 = n; virar SEM013 (caso oficial 20). O comportamento da etapa 2 não muda.

Correções no lexer C, encontradas pela equivalência

  • As colunas passam a contar caracteres UTF-8, e não bytes, dentro de cadeias e comentários. Resolve a pendência 1.5.
  • O literal 'é' passa a ser aceito como um caractere, como no Python.

Organização e documentação

  • O material da "Avaliação Parcial II" foi para ref/ (enunciado, scripts e testes-oficiais/testes-semanticos-20). Antes disso, o material das aulas 14 e 15 já tinha sido organizado.
  • docs/semantica.md traz as regras, as decisões de projeto e o catálogo completo de mensagens. docs/resultados-etapa3.md registra os resultados. READMEs, docs/etapas.md e PENDENCIAS.md foram atualizados.
  • O CI roda a etapa 3, os exercícios da aula 13 e a compilação do minic.c com -Werror.

Testes (CI, Ubuntu + gcc)

Suíte Resultado
testes_semanticos_py.sh / testes_semanticos_c.sh (oficiais AP 2) 20/20 e 20/20
tests/run_semantic_tests.py (oficiais + 16 próprios + equivalência em 103 programas) 175/175
tests/run_parser_tests.py 201/201
scanner 9/9 em cada versão
exercícios da aula 13 250/250
scripts oficiais do parser (LC_ALL=C) 16 aprovados / 25 sintáticos / 0 execução (inalterado)

🤖 Generated with Claude Code

gblsun and others added 5 commits October 9, 2026 23:17
- tabela de símbolos com pilha de escopos (tabela_simbolos.py/.c) e
  analisador semântico em duas passagens (semantico.py/.c): nomes, escopos,
  tipos, chamadas, retornos, contexto de laço e retorno em todos os caminhos
- diagnósticos SEM001-SEM013 com o texto do gabarito da AP 2, mais SEM014
  (categoria), SEM015 (divisão por zero constante) e SEM016 (vetores)
- minic.py e minic.c na raiz, como os scripts oficiais da AP 2 chamam
- parser aceita destino genérico de atribuição só no pipeline semântico
  (SEM013); a etapa 2 continua com o mesmo comportamento
- material da AP 2 organizado em ref/ (enunciado, scripts e 20 testes)
- 15 casos próprios, runner com equivalência C × Python e etapa 3 no CI

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dentro de cadeias, literais de caractere e comentários, os bytes de
continuação de uma sequência UTF-8 válida avançavam a coluna no C, e os
diagnósticos semânticos seguintes na mesma linha apontavam uma coluna a
mais por byte extra em relação ao Python. Resolve a pendência 1.5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ios bytes

O Python aceitava 'é' como um caractere e o C rejeitava com "caractere com
tamanho inválido" (contava 2 bytes). Agora os dois aceitam.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gblsun
gblsun merged commit ae68a5a into main Oct 10, 2026
2 checks passed
@gblsun
gblsun deleted the etapa3-analisador-semantico branch October 10, 2026 02:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant