1/19
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.
Name | Mastery | Learn | Test | Matching | Spaced | Call with Kai |
|---|
No analytics yet
Send a link to your students to track their progress
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.
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.
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.
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>).
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).
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
Análise Bottom-Up
Método de parsing que constrói a árvore sintática partindo das folhas em direção à raiz.
Lookahead
Necessidade de ler um caractere à frente antes de decidir qual token reconhecer, comum em operadores como ">" e ">=".
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).
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.
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.