1 / 105

Compiladores

Bibliografia Recomendada. COMPILADORES Princ

iona
Télécharger la présentation

Compiladores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Compiladores Cristiano Damiani Vasconcellos damiani@joinville.udesc.br

    2. Bibliografia Recomendada

    3. Introduo (Construo de um Executvel)

    4. Introduo (Fases de um Compilador)

    5. Introduo

    6. Introduo

    7. Anlise Lxica O Analisador Lxico (scanner) examina o programa fonte caractere por caractere agrupando-os em conjuntos com um significado coletivo (tokens): palavras chave (if, else, while, int, etc), operadores (+, -, *, /, ^, &&, etc), constantes (1, 1.0, a, 1.0f, etc), literais (Projeto Mono, etc), smbolos de pontuao (; , {, }, etc), labels.

    8. Anlise Lxica constanteInt ? digito digito* constanteDouble ? digito digito*. digito* digito ? {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

    9. Anlise Sinttica Verifica se as frases obedecem as regras sintticas da linguagem: Por exemplo, uma expresso pode ser definida como: expresso + expresso expresso expresso (expresso) constante

    10. Gramticas Livres de Contexto Definidas por uma qudrupla (VN, VT, S, P), onde: VN um conjunto de smbolos no terminais (representam as construes sintticas da linguagem). VT um conjunto de smbolos terminais (tokens da linguagem). S ? VN o smbolo inicial da gramtica. P um conjunto de regras de produo, pares ordenados representados na forma ? ? ?, onde ? ? VN e ? ? (VN ? VT)*.

    11. Gramticas Livres de Contexto <expr> ? <expr> + <expr> | <expr> <expr> | (<expr>) | <const> <const> ? <const><const> | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9

    12. Derivao Verificar se uma frase faz parte da linguagem gerada pela gramtica, envolve sucessivas substituies dos smbolos que ocorrem do lado esquerdo da produo pela sua construo sinttica correspondente. Essa substituio chamada derivao sendo normalmente denotada pelo smbolo ?. E deve iniciar a partir do smbolo inicial da gramtica.

    13. Derivao

    14. rvore de Derivao

    15. Gramticas Ambguas

    16. Gramticas <expr> ? <expr> + <termo> | <expr> - <termo> | <termo> <termo> ? (<expr>) | <const> <expr> <expr> + <termo> <expr> - <termo> + <termo> <termo> - <termo> + <termo> 10 2 + 3

    17. Gramticas <expr> ? <expr> + <termo> | <expr> - <termo> | <termo> <termo> ? <termo> * <fator> | <termo> / <fator> | <fator> <fator> ? (<expr>) | <const>

    18. Gramticas <expr> ? <expr> + <termo> | <expr> - <termo> | <termo> <termo> ? <termo> * <fator> | <termo> / <fator> | <fator> <fator> ? (<expr>) | <const>

    19. Traduo Dirigida pela Sintaxe

    20. Gramticas - Exerccios Considerando a gramtica apresentada anteriormente derive as expresses e apresente a rvore sinttica correspondente: (1 + 2) * 3 (1 2) + 3 * 4 Altere a gramtica para incluir o operador unrio -, esse operador deve ter precedncia maior que todos os outros operadores. Altere a gramtica para que os operadores de adio, subtrao, multiplicao e diviso tenham associatividade da direita para a esquerda. Defina uma gramtica para expresses aritmticas (operadores +, -, *, /) ps fixadas.

    21. Gramticas Dados 2 conjuntos independentes de smbolos: VT Smbolos terminais. VN Smbolos no terminais. Uma gramtica definida como a qudrupla: (VN, VT, S, P) Onde, S ? VN o smbolo inicial da gramtica. P um conjunto de regras de reescrita na forma: ? ? ?, sendo: ? ? (VN ? VT)* VN (VN ? VT)* ? ? (VN ? VT)*

    22. Classificao de Gramticas Irrestritas nenhuma restrio imposta Sensveis ao Contexto - |?| ? |?| Livres de Contexto - ? ? VN ? ? (VN ? VT)+ Regulares - ? ? VN ? tem a forma a ou aB, onde a ? VT e B ? VN

    23. Gramticas Regulares Uma gramtica regular gera uma linguagem regular. C ? 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | 0C | 1C | 2C | 3C | 4C | 5C | 7C | 8C | 9C

    24. Linguagens Regulares Geradas a partir de uma gramtica regular; Podem ser representadas atravs de uma expresso regular; Podem ser reconhecidas por Autmatos Finitos. Considerando linguagens compostas por smbolos 0 e 1 podemos afirmar: a linguagem L1 ={0n1n | n ? 1} no regular; a linguagem L2 ={0n1m | n ? 1, m ? 1} regular;

    25. Expresses Regulares Maneira compacta de representar linguagens regulares. composta de 3 operaes. Sendo e1 e e2 expresses que geram respectivamente duas linguagens regulares L1 e L2:

    26. Expresses Regulares Exemplos: identificador ? (letra | _) (letra | digito | _)* letra ? a | b | ... | z | A | B | ... | Z digito ? 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 constInt ? digito digito* constDouble ? digito digito*.digito* | . digito digito*

    27. Autmato Finito A linguagem gerada por uma gramtica regular pode ser reconhecida por um autmato finito. Um autmato finito consiste em:

    28. Autmato Finito

    29. Autmato Finito

    30. Autmato Finito Implementao

    31. Geradores de Analisadores Lxicos

    32. Anlise Lxica - Exerccios Escreva uma gramtica, expresso regular e AFD que defina os nmeros binrios terminados em zero. Mostre uma expresso regular e o AFD correspondente a gramtica abaixo: S ? aS B ? bC C ? aC | aB | a Escreva uma expresso regular para as constantes double da linguagem C.

    33. Especificao Anlise Lxica expresses regulares. Anlise Sinttica gramticas livres de contexto. Anlise Semntica sistema de tipos (regras de inferncia), semntica denotacional, semntica operacional, semntica de aes. Gerao/Otimizao de Cdigo linguagens para descrio de arquiteturas.

    34. Analisador Sinttico

    35. Mtodos top-down

    36. Mtodo Descendente Recursivo

    37. Mtodo Descendente Recursivo

    38. Analisadores Sintticos Preditivos

    39. Fatorao a Esquerda

    40. Fatorao a Esquerda

    41. Eliminao da Recursividade a Esquerda

    42. Eliminao da Recursividade a Esquerda

    43. Anlise Sinttica Preditiva no Recursiva LL(1)

    44. Analisador Sinttico LL(1)

    45. Analisador Sinttico LL(1)

    46. Construo da Tabela LL(1)

    47. Construo da Tabela LL(1)

    48. Construo da Tabela LL(1)

    49. Construo da Tabela LL(1)

    50. Mtodos bottom-up

    51. Mtodos LR(k)

    52. Mtodos LR

    53. Algoritmo LR(1)

    64. Tabelas SLR(1)

    65. Construo da Tabela Sinttica SLR(1)

    66. Construo da Tabela Sinttica SLR(1)

    67. Construo da Tabela Sinttica SLR(1)

    68. Construo da Tabela Sinttica SLR(1)

    69. Construo da Tabela Sinttica SLR(1)

    70. Construo da Tabela Sinttica SLR(1)

    71. Construo da Tabela Sinttica SLR(1)

    72. Construo da Tabela Sinttica SLR(1)

    73. Construo da Tabela Sinttica LR(1)

    74. Construo da Tabela Sinttica LR(1)

    75. LALR lookahead LR

    76. Construo da Tabela Sinttica LALR(1)

    77. Hierarquia de Gramticas Livres de Contexto

    78. Uso de Gramticas Ambguas

    79. Lex delim [ \t] ws {delim}+ digito [0-9] num {digito}+(\.{digito}*(E[+-]?{digito}+)?)? %% {ws} {} "+" {return TADD;} "-" {return TSUB;} "*" {return TMUL;} "/" {return TDIV;} "(" {return TAPAR;} ")" {return TFPAR;} \n {return TFIM;} {num} {yylval=atof(yytext); return TNUM;}

    80. yacc %{ #include <stdio.h> #include <stdlib.h> #define YYSTYPE double %} %token TADD TMUL TSUB TDIV TAPAR TFPAR TNUM TFIM %%

    81. yacc Linha :Expr TFIM {printf("Resultado:%lf\n", $1);exit(0);} ; Expr: Expr TADD Termo {$$ = $1 + $3;} | Expr TSUB Termo {$$ = $1 - $3;} | Termo ; Termo: Termo TMUL Fator {$$ = $1 * $3;} | Termo TDIV Fator {$$ = $1 / $3;} | Fator ; Fator: TNUM | TAPAR Expr TFPAR {$$ = $2;} ; %%

    82. yacc int yyerror (char *str) { printf("%s - antes %s\n", str, yytext); } int yywrap() { return 1; }

    83. Programa #include <stdio.h> extern FILE *yyin; int main() { yyin = stdin; printf("Digite uma expresso:"); yyparse(); return 0; }

    84. Definio Dirigida pela Sintaxe

    85. Definio Dirigida pela Sintaxe

    86. rvores Sintticas E ? E1 + T {E.ptr = criarNo (+, E1.ptr, T.ptr)} E ? T {E.ptr = T.ptr} T ? T1 * F {T.ptr = criarNo (*, T1.ptr, F.ptr)} T ? F {T.ptr = F.ptr} F ? (E) {F.ptr = E.ptr} F ? const {F.ptr = criarFolha(const.lexval)}

    87. DAG Grafo Direcionado Acclico Identifica as subexpresses comuns. Exemplo: DAG que representa a expresso: a * b + c + a *b.

    88. Cdigo de 3 endereos Uma sequncia de enunciados na forma: x = y op z Onde x, y e z so nomes, constantes ou dados temporrios (criados pelo compilador) e op representa uma operao qualquer. Uma verso linearizada da rvore sinttica, assim chamado por cada instruo poder conter at trs endereos, dois para os operandos e um para o resultado. Bastante semelhante a linguagem de montagem.

    89. Cdigo de 3 endereos Exemplo: a = 2 * b + c t1 = 2 * b t2 = t1 + c a = t2

    90. Cdigo de 3 endereos S ? id = E {S.cod = E.cod ++ gerar(id.lexval = E.local)} E ? E1 + T {E.local = novoTemporario(); E.cod = E1.cod ++T.cod ++ gerar(E.local = E1.local + T.local)} E ? T {E.local = T.local; E.cod = T.cod} T ? T1 * F {T.local = novoTemporario(); T.cod = T1.cod ++ F.cod ++ gerar(T.local = T1.local * F.local)} T ? F {T.local = F.local; T.cod = F.cod} F ? (E) {F.local = E.local; F.cod = E.cod} F ? id {F.local = id.lexval; F.cod =} F ? const {F.local = const.lexval; F.cod =}

    91. Cdigo de 3 endereos Alguns enunciados comumente usados:

    92. Cdigo de 3 endereos n = 1; f = 1; while (n < 10) { f = f * n; n = n + 1; }

    93. Cdigo de 3 endereos n = 1; f = 1; while (n < 10) { f = f * n; n = n + 1; }

    94. Definies S-atribudas Definies dirigidas pela sintaxe que possuem apenas atributos sintetizados.

    95. Definies L-atribudas Uma definio dirigida pela sintaxe L-atribuda se cada atributo herdado de Xj, 1 ? j ? n, do lado direito de uma produo, A ? X1X2...Xn depende somente:

    96. Traduo Top-Down S ? E {imprimir (E.val)} E ? T {E.h = T.val} E {E.val = E.s} E ? +T {E1.h = E.h + T.val} E1 {E.s = E1.s} E ? ? {E.s = E.h} T ? F {T.h = F.val} T {T.val = T.s} T ? * F{T1.h = T.h * F.val} T {T.s = T1.s} T ? ? {T.s = T.h} F ? const {F.val = const.lexval} F ?({push(T.h); push(E.h)} E {E.h = pop(); T.h = pop()})

    97. Anlise Semntica D ? var S S ? id L {atribuirTipo(id.lexval, L.tipo)} S ? S id L {atribuirTipo(id.lexval, L.tipo)} L ? , id L1 {atribuirTipo(id.lexval, L.tipo); L.tipo = L1.tipo} L ? :T {L.tipo = T.tipo} T ? integer {T.tipo = integer} T ? string {T.tipo = string}

    98. Anlise Semntica E ? E1 + T {if (E1.tipo = T.tipo) then E.tipo = E1.tipo else error()} E ? T {E.tipo = T.tipo} T ? T1 * F {if (T1.tipo = F.tipo) then T.tipo = T1.tipo else error()} T ? F {T.tipo = F.tipo} F ? id {F.tipo = consultaTipo(id.lexval);} F ? constInt {F.tipo = Inteiro} F ? constReal {F.tipo = Real} Obs: Em uma situao real as regras semnticas devem implementar a coero dos tipos.

    99. Expresses Lgicas e Relacionais B ? B1 or M C {corrigir(B1.listaf, M.label); B.listav = merge(B1.listav, C.listav); B.listaf = C.listaf;} B ? B1 and M C {corrigir(B1.listav, M.label); B.listaf = merge(B1.listaf, T.listaf); B.listav = C.listav;} B ? C {B.listav = C.listav; B.listaf = C.listaf;} C ? not C1 {C.listav = C1.listaf; C.listaf = C1.listav;} C ? (B) {C.listav = B.listav; C.listaf = B.listaf;} C ? E1 rel E2 {C.listav = criaLista(proxInst); C.listf = criaLista(proxInst+1);} gerar(if E1.local rel E2.local goto _); gerar (goto _); M ? ? {M.label = novolabel()}

    100. Comandos de Seleo e Repetio S ? if (B) then M S {corrigir (B.listav, M.label); corrigir(B.listaf, novolabel();} S ? if (B) then M1 S N else M2 S {corrigir(B.listav, M1.label); corrigir(B.listf, M2.label); corrigir(N.listav, novoLabel();} S ? while M1 (B) M2 S {corrigir(B.listav, M2.label); gerar(goto M1.label); corrigir(B.listaf, novolabel();} N ? ? {N.listav = criarLista(ProxInstr); gerar(goto _);}

    101. Organizao da Memria

    102. Dados Estticos A rea de memria reservada no incio da execuo do programa e liberada apenas no fim de sua execuo (e.g. variveis globais e variveis locais declaradas com o modificador static em linguagem C).

    103. Dados Dinmicos Pilha rea de armazenamento temporrio onde armazenado o registro de ativao das funes. Heap rea reservada para alocao dinmica, permite ao programador alocar e liberar espaos de memria quando necessrio (e.g. funes malloc e free em linguagem C).

    104. Registro de Ativao As informaes necessrias para execuo de uma funo/procedimento so gerenciadas utilizando um bloco de memria chamado registro de ativao, fazem parte do registro de ativao: parmetros, endereo de retorno e variveis locais.

    105. Chamadas de Funes/Procedimentos int fat (int n) { if (n >= 1) return 1; return n * fat(n-1); } fat: pushl %ebp movl %esp, %ebp movl 8(%ebp), %ebx cmpl $1, %ebx jl L1: movl $1, %eax movl %ebp, %esp popl %ebp ret L1: subl $1, %ebx pushl %ebx call fat subl $4, %esp movl 8(%ebp), %ebx imull %ebx, %eax movl %ebp, %esp popl %ebp ret

    106. Chamadas de Funes/Procedimentos int fat (int n) { if (n >= 1) return 1; return n * fat(n-1); } Int main() { int x; x = fat(3); }

More Related