Banco de Dados II — 2026.2

Aula 5
Parser e catálogo

👨‍🏫 Prof. Gustavo Pinto 🏛️ UFPA 📅 13 de outubro de 2026 🕐 7h30 – 9h

Agenda de hoje

O caminho de uma consulta

1

Tokenizador

Quebra o texto em palavras com significado: SELECT, identificador, número

2

Analisador sintático

Monta a árvore, verificando se a ordem das palavras faz sentido

3

Análise semântica

A tabela existe? A coluna existe? O tipo bate? Isso vem do catálogo

A gramática do minidb

comando  := create | insert | select
create   := CREATE TABLE nome ( coluna+ )
insert   := INSERT INTO nome VALUES ( valor+ )
select   := SELECT lista FROM nome [ WHERE coluna = valor ]

Só isso. Sem junção, sem ORDER BY, sem agregação, sem subconsulta. É o suficiente para o critério de pronto.

O catálogo

Catálogo é o conjunto de tabelas em que o banco guarda a descrição das outras tabelas.

Injeção de SQL

Por que concatenar string quebra, e parâmetro não?

# concatenação: o texto do usuário vira gramática
sql = "SELECT * FROM aluno WHERE nome = '" + nome + "'"
# nome = "x' OR '1'='1"  →  a condição sempre é verdadeira

# parâmetro: o texto do usuário nunca passa pelo parser
cursor.execute("SELECT * FROM aluno WHERE nome = %s", (nome,))

A lição do módulo

O parser decide o que é comando e o que é dado. Concatenar string apaga essa fronteira, e é por isso que a injeção existe.

Quem implementou um parser não esquece mais essa distinção. É o motivo de segurança ser ensinada aqui, e não numa aula separada.

Dúvidas?

Próxima: laboratório do M4, tokenizador e parser

📧 gpinto@ufpa.br