Karteikarten
p1

Karten in diesem Stapel (63)
- 1O que o compilador faz com o programa-fonte?Transforma-o em um programa objeto (executável)
- 2Para que serve o programa objeto?Permite gerar saídas a partir das instruções do programa fonte. Além disso, as entradas de dados feitas também são passadas para o programa objeto
- 3Quais as fases de compilação em um processador como o C?Programa-fonte -> Pré-processador -> programa-fonte modificado -> compilador -> programa-objeto em assembly -> montador -> código de máquina -> relocável -> editor de ligação/carregador -> código de máquina alvo
- 4Comente sobre cada uma dessas etapas: Pré-processador -> compilador -> montador -> editor de ligação/carregadorPP -> Manipulação de diretivas (macros e constantes são substituídos por valores reais no código);
Compilador -> frontend + backend sobre o programa-fonte modificado;
Montador -> converte o código de representação intermediário (assembly) em binário;
EL/C -> conecta arquivos e bibliotecas - 5Quais são as fases do frontend de um compilador?Analisador Léxico -> Analisador sintático -> analisador semântico -> geração de código intermediário
- 6Quais são as fases do backend de um compilador?(Otimização do código independente da máquina) -> geraçao do código da máquina alvo -> (Otimização do código dependente da máquina)
- 7O que faz a parte de análise (frontend) do compilador?Subdivide o programa fonte, impõe uma estrutura gramatical e gera uma representação intermediária. Caso encontre erros sintáticos ou semânticos, fornece mensagens para correção. Também coleta informações e as armazena na tabela de símbolos, usada pela parte de síntese.
- 8O que faz a parte de síntese (backend) do compilador?Gera o programa objeto a partir da representação intermediária e da tabela de símbolos
- 9O que são lexemas?Grupos de sequências de caracteres bem definidos e significativos
- 10O que é uma árvore de sintaxe?Uma representação intermediária que ilustra a estrutura gramatical de uma sequência de tokens
- 11Explique o que faz a análise semânticaA análise semântica faz uso da árvore de sintaxe e as informações da tabela de símbolos para verificar a consistência semântica do programa fonte com a definição estabelecida pela linguagem. Outro ponto importante é que nessa etapa é realizada a verificação de tipos (compilador averigua se os operandos são aceitos pela operação), então o compilador interrompe a compilação e aponta o erro ou muda o tipo do operando para um tipo aceito (coerção) pela operação por exemplo.
- 12Durante a tradução de um programa fonte, compiladores podem gerar representações intermediárias, como árvores de sintaxe usadas nas análises sintática e semântica. Após essas etapas, costuma-se criar uma representação de baixo nível, semelhante a um código de máquina para uma máquina abstrata. Essa representação deve ser fácil de produzir e de traduzir para a máquina alvo, sendo comum o uso de código de três endereços, composto por instruções do tipo assembler com três operandos. Verdadeiro ou Falso?Verdadeiro
- 13Liste algumas ferramentas de compiladores. Liste também suas respectivas entradas.Geradores de analisadores léxicos (ERs);
Geradores de analisadores sintáticos (GLC);
Esquemas de tradução dirigidos por sintaxe (árvores de derivação de sintaxe + ações semânticas);
Geradores de gerador de código (coleção de regras para tradução) - 14Em quais cenários as tecnologias de compiladores podem ser aplicadas?Arquitetura de computadores; tradução binária; síntese de hardware; consultas SQL
- 15A análise gira em torno da sintaxe da linguagem que será compilada. Essa sintaxe descreve a forma apropriada dos programas da linguagem, enquanto a semântica da linguagem define o significado dos programas, ou seja, o que eles fazem quando executados. Para especificar a sintaxe, usa-se as GLCs, enquanto a semântica é especificada através de descrições informais e exemplos sugestivos. Verdadeiro ou Falso?Verdadeiro
- 16O que é o atributo nome-token de um token?Os nome-token são símbolos abstratos usados pelo analisador para fazer o reconhecimento sintático
- 17O que é o atributo valor-atributo de um token?Um apontador para a tabela de símbolos que contém informações adicionais do token
- 18Quais são os 4 componentes de uma GLC?1. Um conjunto de símbolos *terminais*, às vezes chamados de “tokens”. Os terminais são os símbolos elementares da linguagem, definidos pela gramática.
2. Um conjunto de *não-terminais*, às vezes chamados de “variáveis sintáticas”. Cada não-terminal representa um conjunto de cadeias de terminais.
3. Um conjunto de *produções*, em que cada produção consiste em um não-terminal, chamado de *cabeça* ou *lado esquerdo* da produção, uma seta e uma sequência de terminais e/ou não-terminais, chamados de *corpo* ou *lado direito* da produção.
4. Uma designação de um dos não-terminais como o símbolo *inicial* da gramática. - 19O que torna uma gramática ambígua?Haver mais de uma árvore de derivação para uma mesma geração
- 20Na análise léxica, um token é um terminal junto com informações adicionais. Uma sequência de caracteres de entrada compreendendo um único token é chamada de lexema. Verdadeiro ou falso?Verdadeiro
- 21É muito mais difícil uma analisador léxico ignorar/remover espaços em branco do que incorporá-los à gramática da linguagem. Verdadeiro ou falso?Falso
- 22O que esse código diz sobre analisadores léxicos?Aponta para a facilidade em ignorar espaços em branco ao invés de incorporá-los na gramática

- 23É muito mais fácil o analisador léxico coletar constantes e enviar um único token (terminal) para o analisador sintático, tendo o valor do atributo do que incorporar a sintaxe das constantes inteiras na gramática. Verdadeiro ou falso?Verdadeiro
- 24O que faz esse pseudo-código? Qual a sua utilidade para análise léxica?Agrupa dígitos em valores inteiros, multiplicar por 10 muda para uma nova casa (unidade x 10 = dezena; assim sucessivamente). A utilidade disso é o envio de um token de número para a análise sintática -> caso seja uma sequência de dígitos, eles serão agrupados e postos em um token no formato . Isso é melhor do que incorporar a sintaxe de constantes

- 25Como separar identificadores de palavras-chaves?Representação única: Usar uma tabela de sequências de caracteres permite que o compilador trabalhe com referências em vez das próprias strings, aumentando a eficiência.
Palavras reservadas: A tabela é inicializada com palavras reservadas e seus tokens; ao ler um lexema, o analisador léxico verifica se ele já existe na tabela para retornar o token correspondente ou criar um novo identificador. - 26O que esse algoritmo faz?Separa palavras-chave de identificadores através do uso de palavras reservadas. Se w não for nulo (palavra-chave) retorna w, do contrário, produz um identificador

- 27O que são tabelas de símbolos?São estruturas de dados usadas pelos compiladores para conter informações sobre as construções do programa fonte.
- 28Quais são as entradas na tabela de símbolos?As entradas na tabela de símbolos contêm informações sobre um identificador, como seu nome ou lexema, seu tipo, seu endereço na memória e qualquer outra informação relevante.
- 29As tabelas de símbolos precisam dar suporte a múltiplas declarações do mesmo identificador dentro de um programa, sendo portanto uma tabela para cada escopo e uma tabela para variáveis globais. Verdadeiro ou falso?Verdadeiro
- 30Quantas e quais as representações intermediárias criadas pelo frontend?Duas representações intermediárias:
1. árvores, incluindo árvores de derivação e árvores sintáticas.
2. representações lineares, especialmente o código de três endereços. - 31"Um front-end também verifica se o programa fonte segue as regras sintáticas e semânticas da linguagem fonte." Isso é verificação dinâmica ou estática?Estática
- 32Não é possível que um compilador construa a árvore sintática ao mesmo tempo em que emite trechos de código de três endereços. Verdadeiro ou falso?Falso
- 33Dê exemplos de operadores de sintaxe concreta e seu correspondente na sintaxe abstrata em Java= (assign);
||, && (cond);
==, !=, <, >, <=, >= (rel);
+, -, /, *, % (op);
! (not);
[] (access) - 34Quais verificações estão inclusas na verificação estática?De tipo e de sintaxe
- 35O que são L-Values e R-Values?Valores a esquerda e valores a direita. Representam respectivamente endereços de memória (lado esquerdo de uma atribuição por exemplo) e valores (lado direito de uma atribuição por exemplo)
- 36O que é escandimento?O escandimento consiste no processo simples de varredura da entrada sem se preocupar, por exemplo, com a remoção de comentários e a compactação de caracteres de espaço em branco consecutivos em apenas um cara
- 37Por que é recomendável dividir o analisador léxico do sintático?Por questões de :
Simplicidade de projeto - Implementar verificação de espaço em branco ao analisador sintático seria bem ruim, considerando as outras responsabilidades desse componente;
Eficiência - É válido adicionar otimizações para cada componente;
Portabilidade - Peculiaridades da entrada restritas ao analisador léxico - 38O que é Padrão na análise léxica?Descrição da forma que os lexemas de um token podem assumir;
- 39Liste alguns tokens típicos- Um token para cada palavra-chave;
Tokens para operadores, individualmente ou em classes;
- Um token representando todos os identificadores;
- Um ou mais tokens representando constantes, como números e cadeias literais;
- Tokens para cada símbolo de pontuação, como parênteses, vírgula e ponto-e-vírgula; - 40O que são erros léxicos?Caracteres não presentes em nenhum padrão de lexema.
- 41Por que usar par de buffers ao invés de de ler caractere a caractere na leitura de arquivos de entrada? Além disso, por que 2 buffers e não 1? Por que não mais de 2?Economiza essas chamadas, o que torna a leitura mais eficiente. Para evitar que lexemas fiquem incompletos por falta de espaço. Evitar uso de memória em excesso
- 42Para que servem os apontadores na leitura de arquivos de entrada com par de buffers?LexemeBegin - marca o início do lexema que pode estar sendo lido;
Forward - olha adiante para tentar encontrar o padrão do lexema, caso realmente seja o lexema, volta para o último caractere do lexema e retorna o token - 43Por que usar sentinelas na leitura de arquivos?O apontador forward sempre precisa verificar se saiu de um buffer e entrou em outro, com as sentinelas (eof) essa verificação é desnecessária. Caso forward alcance a sentinela, um novo buffer é carregado
- 44Qual a precedência de operações em expressões regulares?Parênteses > Fecho de Kleene > Concatenção > União
- 45União é comutativa? União é associativa?Sim. Sim
- 46Concatenação é associativa? Concatenção é comutativa?Sim. Não
- 47Fecho de Kleene, União e Concatenção. Qual delas possui propriedade distributiva?Concatenação
- 48εr = rε = r ?Sim
- 49r* = (r|ε) ?Sim
- 50r** = r* ?Sim
- 51O que são definições regulares e qual a sua utilidade?Nomes para expressões regulares, podem ser usadas em outras expressões (di -> ri). di não pertence ao alfabeto e ri = Σ ∪ (di)
Por exemplo:
digit -> 0|1|...|9
digits -> digit digit* - 52Liste extensões de expressões regularesc - caractere c (não pode ser um operador);
\c - caractere c literalmente;
. - qualquer caractere, exceto "\n";
^ - início de uma linha;
$ - fim de uma linha;
[s] - qualquer um dos caracteres na cadeia s;
[^s] - qualquer um dos caracteres que não esteja na cadeia s;
* - 0 ou mais ocorrências;
+ - uma ou mais ocorrências;
? - uma ou nenhuma ocorrência;
r{m,n} - entre m e n ocorrências de r;
r1r2 - r1 seguido de r2;
r1|r2 - occorência de r1 ou r2; - 53Como o apontador forward é usado no AF?O * indica que o apontador deve retornar 1 posição (similar à leitura do par de buffers) -> retornando o token se um estado final tiver sido alcançado

- 54O que faz o método installID?Adiciona um identificador na tabela de símbolos, caso este não esteja lá e retorna um apontador para a entrada da tabela de símbolos referente ao lexema encontrado
- 55O que faz a função getToken?Examina a entrada da tabela de símbolos em busca do lexema encontrado e retorna qualquer que seja o nome do token que a tabela de símbolos diz que esse lexema representa — ou `id` ou um dos tokens de palavra-chave que foi inicialmente instalado na tabela.
- 56O que esse AF reconhece?Números sem sinal (com expoente, casas decimais ou simples inteiros)

- 57Por que é melhor usar AFDs a AFNs na análise léxica?Por conta do determinismo, se fosse usado AFN seria preciso calcular cada possível transição e estado subsequente
- 58O que é um estado importante em um AFN?Um estado que possua uma transição não vazia saindo dele
- 59Como 2 conjuntos de estados de um AFN podem ser considerados os mesmos?Atendendo as 2 condições abaixo:
1. Se possuírem os mesmos estados importantes;
2. Os apresentarem ao menos 1 estado de aceitação ou não apresentarem nenhum - 60Quais são os estados importantes numa ER e onde eles são representados numa árvore sintática?São os símbolos do alfabeto. Representados nas folhas
- 61O que é o método nullable(n)?É uma função booleana que retorna true se a subexpressão representada pelo nó n conter palavra vazia
- 62O que é firstpos(n) e lastpos(n)?Firstpos(n) -> conjunto de posições da subárvore com raiz n que correspondem ao primeiro símbolo de pelo menos uma palavra da linguagem da subexpressão n
Lastpos(n) -> Análogo ao firstpos(n), vale destacar que no nó de concatenção c1c2 devem ser invertidos (c2c1) - 63—
Informationen
- Beschreibung
- Técnico compiladores Karteikarten am p1, erstellt von Gustavo Eufrausino de Medeiros am 27/04/2025.
- Erstellt von
- Gustavo Eufrausino de Medeiros
- Aufrufe
- 3
- Bewertung