Simulado de Compiladores - Professor Adriano Maia

0.0(0)
Studied by 0 people
call kaiCall Kai
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
GameKnowt Play
Card Sorting

1/19

flashcard set

Earn XP

Description and Tags

Flashcards de vocabulário baseados no Simulado 1 da disciplina de Compiladores, abrangendo fases da compilação, análise léxica, sintática e conceitos fundamentais.

Last updated 1:05 AM on 6/3/26
Name
Mastery
Learn
Test
Matching
Spaced
Call with Kai

No analytics yet

Send a link to your students to track their progress

20 Terms

1
New cards

Quais são as duas grandes fases sequenciais que compõem a estrutura fundamental de um compilador?

Verso: 1. Análise (Front-end): Compreende o código fonte, valida sua estrutura e regras, e gera uma representação intermediária. 2. Síntese (Back-end): Pega a representação intermediária, otimiza e gera o código objeto/binário final.

2
New cards

Qual é a diferença conceitual fundamental entre um Compilador e um Interpretador?

O Compilador traduz todo o programa fonte de uma vez para um programa objeto equivalente (executável). O Interpretador não gera um executável; ele lê e executa diretamente as operações especificadas no fonte linha por linha.

3
New cards

Qual é a função primordial do Analisador Léxico (Scanner)?

Componente que lê o fluxo de caracteres da entrada, agrupa-os em lexemas e produz uma sequência de tokens, além de remover comentários e espaços em branco para o analisador sintático.

4
New cards

Diferencie "Lexema" de "Token".

Lexema: É a sequência exata de caracteres encontrada textualmente no código fonte (ex: 42). Token: É a categoria abstrata estruturada do lexema, composta por um nome e um atributo opcional (ex: <NUM, 42>).

5
New cards

Quais são as tarefas secundárias frequentes do Analisador Léxico para "limpar" a entrada?

A remoção de comentários do programador e a eliminação de caracteres de espaço em branco (como tabulações, espaços extras e quebras de linha).

6
New cards

Por que o Analisador Léxico utiliza a técnica de "Input Buffering" (pares de buffers)?

Para melhorar a eficiência da leitura de caracteres do disco, lendo blocos maiores de dados de uma vez e permitindo "olhar à frente" (lookahead) sem perder desempenho.

7
New cards

Por que o Analisador Léxico precisa olhar caracteres à frente (lookahead)? Dê o exemplo dos operadores > e >=.

Para decidir qual token reconhecer com precisão. Ao ler >, ele precisa olhar o próximo caractere: se for =, reconhece o token >=; se não for, sabe que o token é apenas > e retrocede o ponteiro.

8
New cards

Qual a limitação teórica fundamental das Expressões Regulares que impede seu uso na análise da sintaxe completa de uma linguagem?

A falta de "memória" para contagem (por serem baseadas em Autômatos Finitos). Elas não conseguem validar estruturas aninhadas e hierárquicas, como garantir que n parênteses que abrem tenham exatamente $n$ fechamentos.

9
New cards

O que são os 4 componentes que definem formalmente uma Gramática Livre de Contexto (G = < Sigma, N, P, S>)?

Sigma: Símbolos terminais (tokens).

N: Símbolos não terminais (variáveis estruturais).

P: Regras de produção.

S: Símbolo inicial da gramática.

10
New cards

O que é uma "Árvore de Derivação" (ou Árvore Sintática) na análise sintática?

É uma representação hierárquica do código onde a raiz é o símbolo inicial da gramática, os nós interiores são símbolos não-terminais e as folhas são os terminais (tokens).

11
New cards

por que os compiladores tentam otimizar prioritariamente o uso de registradores na fase de síntese?

Porque os registradores são a memória de acesso mais rápida do processador (ex: 0.3 ns). Maximizar seu uso reduz o acesso à memória RAM (mais lenta), sendo crucial para o desempenho do código gerado.

12
New cards

Se um programador escreve whille (com dois Ls) em vez de while, que tipo de erro ocorre e em qual fase?

Erro Léxico na fase de Análise Léxica. Ocorre porque a sequência de caracteres não corresponde a nenhum padrão textual/token esperado pela linguagem.

13
New cards

Uma expressão aritmética com parênteses não balanceados — ex: ((a+b) — exemplifica que tipo de erro e em qual fase?

Erro Sintático na fase de Análise Sintática. Os tokens individuais estão corretos, mas a estrutura gramatical/ordem deles viola as regras da linguagem.

14
New cards

O comando int resultado = 10 + "texto"; gera tokens válidos e sintaxe correta, mas causa erro. Qual o tipo de erro e por que não é pego antes?

Erro Semântico na fase de Análise Semântica. As fases anteriores só analisam texto e estrutura gramatical ; somente a análise semântica checa o significado lógico e a compatibilidade de tipos consultando a tabela de símbolos.

15
New cards

Quais são dois objetivos fundamentais ou estratégias do tratamento de erros do analisador sintático ao encontrar uma falha?

1. Continuar a análise: Tentar se recuperar do erro atual para continuar processando o código e encontrar erros subsequentes. 2. Modo de Pânico (Estratégia): Descartar tokens até encontrar um token de sincronização (como ; ou }) para reiniciar a análise de forma segura.

16
New cards

Análise Bottom-Up

Método de parsing que constrói a árvore sintática partindo das folhas em direção à raiz.

17
New cards

Lookahead

Necessidade de ler um caractere à frente antes de decidir qual token reconhecer, comum em operadores como ">" e ">=".

18
New cards

Qual a diferença conceitual entre o Parsing Top-Down e o Parsing Bottom-Up na construção da árvore sintática?

Top-Down: Constrói a árvore de cima para baixo, partindo da raiz para as folhas.

Bottom-Up: Constrói a árvore de baixo para cima, partindo das folhas (tokens) em direção à raiz (geralmente usando uma pilha).

19
New cards

Qual a ordem de varredura da entrada de tokens nos métodos de análise sintática Top-Down e Bottom-Up?

Em ambos os casos, a entrada de tokens é varrida estritamente da esquerda para a direita, um token de cada vez.

20
New cards

Qual o papel da Tabela de Símbolos durante o processo de compilação?

Registrar os nomes de variáveis, funções e identificadores do código, armazenando informações sobre seus atributos cruciais, como tipo, escopo e memória alocada.