Documentação do Projeto
Esta seção contém a documentação técnica detalhada do interpretador Python, incluindo estrutura de arquivos e componentes do sistema.
Fluxo Geral
O interpretador Python segue um fluxo clássico de compiladores com as seguintes fases:
Estrutura Detalhada do Projeto
Arquivos Principais
main.c
Função: Ponto de entrada do programa
Responsabilidades: - Inicialização do sistema - Abertura e validação do arquivo de entrada - Chamada do parser (yyparse) - Execução do interpretador - Tratamento de erros de alto nível
Fluxo principal:
C | |
---|---|
Makefile
Função: Sistema de build automatizado
Responsabilidades: - Compilação do projeto - Geração de arquivos Flex/Bison - Execução de testes - Limpeza de arquivos temporários
Alvos principais:
- make
- Compila o projeto
- make clean
- Remove arquivos compilados
- make run
- Compila e executa
- make test
- Executa suite de testes
- make test-complete
- Executa todos os testes
indent_preproc.py
Função: Pré-processador de indentação Python
Responsabilidades:
- Converter espaços/tabs em tokens @INDENT@
e @DEDENT@
- Remover comentários (linhas começando com #
)
- Normalizar quebras de linha
- Detectar erros de indentação inconsistente
Algoritmo:
Python | |
---|---|
Pasta lexer/
lexer.l
Função: Especificação do analisador léxico (Flex)
Responsabilidades: - Reconhecimento de tokens Python - Conversão de texto em sequência de tokens - Detecção de erros léxicos
Tokens reconhecidos:
- Palavras-chave: if
, else
, while
, break
, continue
, and
, or
, not
, True
, False
, print
, input
- Operadores: +
, -
, *
, /
, %
, **
, ==
, !=
, <
, >
, <=
, >=
, =
- Literais: Inteiros, floats, strings, booleanos
- Identificadores: Nomes de variáveis e funções
- Especiais: @INDENT@
, @DEDENT@
, :
, ,
, (
, )
, \n
Pasta parser/
parser.y
Função: Gramática do analisador sintático (Bison)
Responsabilidades: - Definição da gramática Python simplificada - Construção da Árvore Sintática Abstrata (AST) - Detecção de erros sintáticos - Gerenciamento de precedência de operadores
Regras gramaticais principais:
Text Only | |
---|---|
ast.h e ast.c
Função: Definição e implementação da Árvore Sintática Abstrata
Responsabilidades: - Estrutura de dados para representar o código - Funções de criação e destruição de nós - Diferentes tipos de nós (operações, valores, estruturas de controle)
Tipos de nós:
types.h
Função: Definições de tipos de dados do sistema
Responsabilidades: - Tipos de dados suportados (int, float, string, bool) - Estruturas para resultados de expressões - Definições de operadores
Tipos principais:
C | |
---|---|
tabela.h e tabela.c
Função: Tabela de símbolos para gerenciamento de variáveis
Responsabilidades: - Armazenamento de variáveis e seus valores - Busca e inserção de símbolos - Gerenciamento de escopo (simplificado)
Estrutura:
C | |
---|---|
interpretador.h e interpretador.c
Função: Motor de execução do interpretador
Responsabilidades: - Interpretação da AST - Execução de instruções - Gerenciamento da tabela de símbolos - Tratamento de erros de execução
Funções principais:
C | |
---|---|
Pasta tests/
Função: Suite completa de testes do sistema
Organização:
- test_*.py
- Testes de funcionalidade (código Python)
- test_*.c
- Testes unitários (componentes C)
- test_erro_*.py
- Testes de tratamento de erros
Principais categorias: 1. Testes de Expressões - Operações aritméticas e lógicas 2. Testes de Estruturas - Condicionais, loops, funções 3. Testes de Tipos - Inteiros, floats, strings, booleanos 4. Testes de Erro - Tratamento de exceções e erros 5. Testes Unitários - Componentes individuais
Pasta scripts/
Função: Scripts de automação e teste
Scripts principais:
- run_tests.sh
- Suite completa de testes
- test_resultados.sh
- Verificação de resultados
- test_erros.sh
- Testes de tratamento de erros
- quick_test.sh
- Teste rápido
Componentes do Sistema
1. Pré-processador (indent_preproc.py)
O pré-processador resolve um dos maiores desafios da linguagem Python: a indentação. Ele converte a indentação baseada em espaços em tokens explícitos que podem ser processados pelo lexer.
Desafios resolvidos:
- Detecção de níveis de indentação
- Validação de consistência
- Geração de tokens @INDENT@
e @DEDENT@
2. Analisador Léxico (lexer.l)
O lexer identifica e categoriza os elementos básicos da linguagem Python.
Características: - Reconhecimento de todos os tokens Python básicos - Tratamento de strings com aspas simples e duplas - Suporte a números inteiros, floats e notação científica - Detecção de palavras-chave e identificadores
3. Analisador Sintático (parser.y)
O parser verifica a estrutura gramatical e constrói a AST.
Funcionalidades: - Gramática Python simplificada mas completa - Precedência de operadores correta - Construção hierárquica da AST - Detecção de erros sintáticos
4. Árvore Sintática Abstrata (AST)
A AST é a representação intermediária do código fonte.
Vantagens: - Estrutura hierárquica clara - Fácil navegação e interpretação - Separação entre análise e execução - Base para otimizações futuras
5. Interpretador (interpretador.c)
O interpretador executa o código representado pela AST.
Capacidades: - Execução de expressões aritméticas e lógicas - Controle de fluxo (if/else, while) - Gerenciamento de variáveis - Funções built-in (print)
6. Tabela de Símbolos (tabela.c)
Gerencia o armazenamento e acesso a variáveis.
Funcionalidades: - Inserção e busca eficiente de símbolos - Armazenamento de diferentes tipos de dados - Gerenciamento de memória automático
Funcionalidades Implementadas
Tipos de Dados
- Inteiros: Suporte completo a números inteiros positivos e negativos
- Ponto Flutuante: Números decimais e notação científica
- Strings: Texto entre aspas simples ou duplas
- Booleanos: Valores
True
eFalse
Operadores
- Aritméticos:
+
,-
,*
,/
,%
,**
- Comparação:
==
,!=
,<
,>
,<=
,>=
- Lógicos:
and
,or
,not
Estruturas de Controle
- Condicionais:
if
/else
com suporte a blocos aninhados - Loops:
while
com suporte abreak
econtinue
- Blocos: Indentação Python completa
Funções Built-in
print()
: Saída formatada com múltiplos argumentos
Tratamento de Erros
- Erros léxicos: Caracteres inválidos
- Erros sintáticos: Estrutura gramatical incorreta
- Erros semânticos: Variáveis não definidas, divisão por zero
- Erros de indentação: Inconsistência na indentação
Fluxo de Dados
1. Compilação
Bash | |
---|---|
2. Execução
Bash | |
---|---|
Histórico de Versão
Versão | Data | Descrição | Autor(es) |
---|---|---|---|
1.0 |
27/06/2025 | Criação do documento | Arthur Evangelista |
Esta documentação técnica fornece uma visão completa da arquitetura e implementação do interpretador Python.