Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Slides

(Price, 2005) No contexto de implementação de linguagens de programação, dê o significado dos seguintes termos:

  1. compilador
  2. interpretador
  3. montador
  4. pré-compilador

(Aho, 2008) Qual é a diferença entre um compilador e um interpretador?

(Price, 2005) Aponte as vantagens e desvantagens dos interpretadores em relação aos compiladores?

(Ricarte, 2008) Quantos bits são necessários para representar instruções em código de máquina para os seguintes processadores? Assuma que todos os códigos de operação têm o mesmo número de bits.

  1. Um processador com 38 instruções que podem ter referências a dois endereços de memória de 32 bits cada um;
  2. Um processador com 32 instruções que podem ter referências a três registradores, sendo que há 16 registradores no processador;
  3. Um processador com 142 instruções que podem ter referências a um endereço de 32 bits.

(Aho, 2008) Que vantagens existem em um sistema de processamento de linguagem no qual o compilador produz linguagem simbólica em vez de linguagem de máquina?

(Ricarte, 2008) Um dos projetistas do processador hipotético sugeriu que, em vez das instruções LOAD e STORE, uma única instrução MOVE deveria ser utilizada; nesse caso, a ordem dos operandos serviria para diferenciar a direção da transferência. Por exemplo, MOVE 1, R0 indicaria a transferência do conteúdo da posição 1 de memória para o registrador R0. Já a instrução MOVE R0, 4 indicaria a transferência do conteúdo do registrador R0 para a posição de memória 4. Por que os projetistas teriam mantido duas instruções separadas?

(Price, 2005) Explique o processo de compilação: fases e seu inter-relacionamento.

(Ricarte, 2008) Qual é o código binário para as seguintes instruções do processador hipotético:

  1. LOAD 1, R0
  2. STORE R0, 4
  3. BZERO R2, 15
  4. ADD R0, R2, R0

(Aho, 2008) Um compilador que traduz uma linguagem de alto nível para outra linguagem de alto nível é chamada de tradutor de fonte para fonte. Que vantagens existem em usar a linguagem de programação C como linguagem objeto para um compilador?

(Price, 2005) Qual o significado de "passo" no processo de compilação? Quais as vantagens e desvantagens de implementar um compilador em vários passos?

(Aho, 2008) Descreva algumas das tarefas que um programa montador precisa realizar.

(Ricarte, 2008) Os projetistas da segunda geração do processador hipotético devem considerar as seguintes demandas:

  1. Acrescentar duas novas operações;
  2. Dobrar o número de registradores de dados;
  3. Dobrar a largura dos dados de 8 para 16 bits;
  4. Ampliar a capacidade de endereçamento de 16 para 256 posições.

Qual o impacto isolado de cada uma dessas modificações no formato binário das instruções do processador? E, se todas as modificações forem implantadas, qual será o novo formato da instrução?

(Aho, 2008) Quais são as vantagens de (a) um compilador em relação a um interpretador e (b) um interpretador em relação a um compilador?

(Ricarte, 2008) Qual é a sequência de instruções simbólicas correspondentes aos seguintes códigos de máquina do processador hipotético:

  1. 00000000 10001010 11101010
  2. 11111111 10101010 01010101 00011011

(Aho, 2008) Indique quais dos seguintes termos aplicam-se às seguintes linguagens:

  1. imperativa
  2. declarativa
  3. von Neumann
  4. orientada por objeto
  5. funcional
  6. terceira geração
  7. quarta geração
  8. de scripting

(José Neto, 2016) Que são compiladores autorresidentes, compiladores autocompiláveis e compiladores cruzados? Justifique sua aplicabilidade prática e a razão de existência dos três tipos de compiladores.

(José Neto, 2016) Quais as dificuldades encontradas quando se deseja transportar um compilador de uma máquina para outra? Como contorná-las?

Aho, Alfred V. (2008). Compiladores: princípios, técnicas e ferramentas. 2ª edição. São Paulo: Pearson Addison-Wesley. 634 páginas.

José Neto, João. (2016). Introdução à Compilação. 2ª edição. Rio de Janeiro: Elsevier. 307 páginas.

Price, Ana Maria de Alencar. (2005). Implementação de Linguagens de Programação: compiladores. 3ª edição. Porto Alegre: Instituto de Informática da UFRGS: Sagra Luzzatto. 212 páginas.

Ricarte, Ivan. (2008). Introdução à Compilação. Rio de Janeiro: Elsevier. 264 páginas.

Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.