VinBR

Compiladores 07/03/2012

Mar 13th, 2012
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1.  
  2. # # # # # # # # # # # # #
  3. # Compiladores #
  4. # Professora Mariza #
  5. # notasdogarcia.blog.com #
  6. # # # # # # # # # # # # #
  7.  
  8. // A aula começou com uma revisão da ultima aula.
  9.  
  10. Lembram-se que um compilador tem o frontend e o backend?
  11.  
  12. O assunto do curso é focado no frontend.
  13.  
  14. A primeira etapa a Análise Léxica é feita de forma semelhante a um automato, a cada caractere lido muda-se de estado até reconhecer um elemento da linguagem.
  15.  
  16. A cada reconhecimento uma tupla de dados chamados token é adicionada a lista de elementos encontrados.
  17.  
  18. Como já falamos na aula passada o primeiro elemento do token é um identificador de que tipo de token ele é, e o segundo guarda os dados relacionados.
  19. Ex: o caractere 5 seria o token: <num, 5>, é um número mais especificamente no valor 5.
  20.  
  21. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  22.  
  23. Análise Sintática
  24.  
  25. Ela é feita utilizando-se uma Árvore de Derivação que verifica se a estrutura dos tokens é uma estrutura reconhecida pela gramática ou não.
  26.  
  27. A árvore efetivamente usada é a arvore de sintaxe abstrada, que é igual a uma arvore de derivação porém os termos não terminais
  28. são substituidos pelos simbolos terminais que eles geram.
  29.  
  30. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  31.  
  32. Análise Semântica:
  33.  
  34. Converções de tipo é responsabilidade do analisador semântico.
  35.  
  36. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  37.  
  38. Geração de Código Intermediário.
  39.  
  40. - Pode-se gerar, uma arvore, um assembly, uma versão pós fixada da linguagem, ou seja um código intermediario pode ser entendido de muitas formas.
  41.  
  42. - O código intermediario deve ser fácil de ser produzido e fácil de ser traduzido para a máquina alvo.
  43.  
  44. - Normalmente os compiladores criam várias estruturas de 3° operandos do tipo: id0 = id1 op id2
  45.  
  46. // Em operações longas do tipo: a = b + c / d * x, são divididas em várias instruções com váriaveis temporárias do tipo:
  47. // t0 = c / d, t1 = t0 * x, a = b + t1
  48.  
  49. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  50.  
  51. Otimização de código:
  52.  
  53. Normalmente um código otimizado significa um código mais rápido.
  54. Porém outros objetivos também podem ser visados: Um código menor, um código com menor custo energético etc.
  55.  
  56. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  57.  
  58. No geral durante a geração do código as tuplas são enumeradas, e as expressões do tipo id0 = id1 op id2 são construidos com os nomes das tuplas enumeradas.
  59.  
  60. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  61.  
  62. Otimizações tem como ponto crítico a atribuição de variáveis à registradores. Já que seu número é limitado e alguns registradores já tem funções pre-definidas.
  63.  
  64. O problema dessa parte da otimização é que é um problema NP-Completo e apesar de existerem soluções boas e muito boas, não existem soluções ótimas.
  65.  
  66. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  67.  
  68. CONCEITO:
  69. Fase de um compilador diz respeito a sua organização lógica (o que nós acabamos de falar).
  70.  
  71. CONCEITO:
  72. Um Passo de um compilador diz respeito a recepção de uma entrada pelo compilador e escrita de uma saída.
  73. Em uma compilação completa pode-se dizer que temos dois Passos, um no frontend, e um backend.
  74.  
  75. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  76.  
  77. Ferramentas que usaremos:
  78.  
  79. - Geradores de Analisadores Léxicos, produzem análizadores léxicos a partir de uma descrição dos tokens de uma linguagem em forma de expressão regular. (IAC)
  80. - Gerados de Reconhecedores Sintáticos produzem automaticamente reconhecedores sintáticos a partir de uma descrição gramatical da linguagem de programação. (CUP)
  81. - Mecanismos de tradução dirigida por sintaxe produzem coleções de rotinas para percorrer uma arvore de derivação e gerar código intermediário.
  82. - A ótimização e a geração do código devem ser feitos à mão.
  83.  
  84. Existem links para as ferramentas citadas acima no site da materia.
  85.  
  86. // Fim da aula, agora teremos um pequeno teste para avaliar nosso conhecimento inicial da materia, ele valerá 2 pontos eerrando ou acertando.
Advertisement
Add Comment
Please, Sign In to add comment