O GoConqr está de visual novo! Conte para nós o que você achou.

Flashcards

p1

Gustavo Eufrausino de Medeiros compiladores Técnico Português 63 flashcards

p1

Flashcards do conjunto (63)

  1. 1O que o compilador faz com o programa-fonte?Transforma-o em um programa objeto (executável)
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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)
  7. 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.
  8. 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
  9. 9O que são lexemas?Grupos de sequências de caracteres bem definidos e significativos
  10. 10O que é uma árvore de sintaxe?Uma representação intermediária que ilustra a estrutura gramatical de uma sequência de tokens
  11. 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.
  12. 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
  13. 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)
  14. 14Em quais cenários as tecnologias de compiladores podem ser aplicadas?Arquitetura de computadores; tradução binária; síntese de hardware; consultas SQL
  15. 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
  16. 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
  17. 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
  18. 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.
  19. 19O que torna uma gramática ambígua?Haver mais de uma árvore de derivação para uma mesma geração
  20. 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. 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
  22. 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áticaO que esse código diz sobre analisadores léxicos?
  23. 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
  24. 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 constantesO que faz esse pseudo-código? Qual a sua utilidade para análise léxica?
  25. 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.
  26. 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 identificadorO que esse algoritmo faz?
  27. 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.
  28. 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.
  29. 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
  30. 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. 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
  32. 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
  33. 33Dê exemplos de operadores de sintaxe concreta e seu correspondente na sintaxe abstrata em Java= (assign);
    ||, && (cond);
    ==, !=, <, >, <=, >= (rel);
    +, -, /, *, % (op);
    ! (not);
    [] (access)
  34. 34Quais verificações estão inclusas na verificação estática?De tipo e de sintaxe
  35. 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)
  36. 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
  37. 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
  38. 38O que é Padrão na análise léxica?Descrição da forma que os lexemas de um token podem assumir;
  39. 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;
  40. 40O que são erros léxicos?Caracteres não presentes em nenhum padrão de lexema.
  41. 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
  42. 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
  43. 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
  44. 44Qual a precedência de operações em expressões regulares?Parênteses > Fecho de Kleene > Concatenção > União
  45. 45União é comutativa? União é associativa?Sim. Sim
  46. 46Concatenação é associativa? Concatenção é comutativa?Sim. Não
  47. 47Fecho de Kleene, União e Concatenção. Qual delas possui propriedade distributiva?Concatenação
  48. 48εr = rε = r ?Sim
  49. 49r* = (r|ε) ?Sim
  50. 50r** = r* ?Sim
  51. 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*
  52. 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;
  53. 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çadoComo o apontador forward é usado no AF?
  54. 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
  55. 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.
  56. 56O que esse AF reconhece?Números sem sinal (com expoente, casas decimais ou simples inteiros)O que esse AF reconhece?
  57. 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
  58. 58O que é um estado importante em um AFN?Um estado que possua uma transição não vazia saindo dele
  59. 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
  60. 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
  61. 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
  62. 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. 63—

Informações

Descrição
Técnico compiladores FlashCards sobre p1, criado por Gustavo Eufrausino de Medeiros em 27-04-2025.
Visualizações
3
Avaliação

Fale Conosco

Sobre o que é sua mensagem?

O que você acha do novo visual?

Você gostou?