Click here to load reader

Compiladores 4

  • View
    1.515

  • Download
    1

Embed Size (px)

DESCRIPTION

Material de apoio do livro Introdução à Compilação

Text of Compiladores 4

  • 1. Anlise sinttica Ivan Ricarte2008I NTRODUO COMPILAO

2. SumrioReconhecimento de sentenasDerivaes cannicasrvores sintticasGramticas ambguasAnalisadores sintticosAutmato de pilhaAnalisador sinttico preditivoAnalisador de precedncia fracaGeradores de analisadores sintticos Especicao da gramtica Manipulao das sentenas reconhecidas Desenvolvimento de uma aplicaoI NTRODUO COMPILAO 3. Anlise sinttica Arquivo de anliseArquivo de ...sntesedestino origemlxicaanlise sintticaanlise EstruturasGramticasinternasI NTRODUO COMPILAO 4. Reconhecimento de sentenas O reconhecimento de sentenas, ou parsing, o procedimento que verica se uma dada sentena pertence linguagem gerada por uma gramtica. Gramticas tipo 2, ou gramticas livres de contexto, so adequadas para representar boa parte das caractersticas de linguagens de programao. I NTRODUO COMPILAO 5. Validao de uma sentenaH duas formas de validar uma sentena:Top-down ou descendente: a partir do smbolo sentencial, selecionar uma seqncia de aplicao de regras e aplic-las, substituindo o lado esquerdo pelo lado direito, at que se obtenha a sentena sob anlise; ouBottom-up ou ascendente: a partir da sentena, selecionar uma seqncia de aplicao de regras e aplic-las, substituindo o lado direito pelo lado esquerdo, at que reste apenas o smbolo sentencial. I NTRODUO COMPILAO 6. Reconhecimento de sentenasExemplo: uma gramtica para expressesPara reconhecer expresses (E): EE +E1 EE E2 E(E) 3 Ev 4 A expresso (v + v ) v faz parte dessa gramtica?I NTRODUO COMPILAO 7. Estratgias de validao H duas formas de responder a essa questo: Validao descendente A partir do smbolo sentencial E, procura aplicar produes da gramtica substituindo o lado esquerdo pelo lado direito at que a sentena (v + v ) v seja derivada Validao ascendente A partir da sentena (v + v ) v , procura aplicar produes da gramtica substituindo o lado direito pelo lado esquerdo at que reste apenas o smbolo sentencial E I NTRODUO COMPILAO 8. Validao descendente Produes DerivaesE E +E 1E E E 22E = E EE (E)33E v4= (E) E1= (E + E) E4= (v + E) E4= (v + v ) E4= (v + v ) vSeqncia 2, 3, 1, 4, 4, 4 I NTRODUO COMPILAO 9. Validao descendenteOutras seqncias de reconhecimento podem ser obtidas paraessa mesma estratgia:2, 3, 4, 1, 4, 423 4E = E E = (E) E = (E) v144= (E + E) v = (E + v ) v = (v + v ) v2, 4, 3, 1, 4, 424 3E = E E = E v = (E) v144= (E + E) v = (E + v ) v = (v + v ) v I NTRODUO COMPILAO 10. Validao ascendente ProduesDerivaesE E +E1E E E24(v + v ) v = (E + v ) vE (E) 3 4E v 4 = (E + E) v 4= (E + E) E 1= (E) E 3= E E 2= ESeqncia de reconhecimento 4, 4, 4, 1, 3, 2Tambm h outras seqncias I NTRODUO COMPILAO 11. Derivaes cannicas Forma sistemtica de selecionar qual smbolo da forma sentencial ser substitudo na prxima derivao Duas formas Derivao cannica mais esquerda (leftmost derivation) Derivao cannica mais direita (rightmost derivation) Para uma derivao cannica, a seqncia de reconhecimento nica I NTRODUO COMPILAO 12. Derivaes cannicasDerivao cannica mais esquerdaDerivao cannica mais esquerda aplica uma produo dagramtica para substituir o smbolo no-terminalmais esquerda da forma sentencial A seqncia de produes aplicadas desde o smbolo sentencial at a sentena denominada a seqncia de reconhecimento mais esquerda, ou leftmost parseI NTRODUO COMPILAO 13. Derivaes cannicasDerivao cannica mais direitaDerivao cannica mais direita smbolo no-terminal mais direita da forma sentencial selecionado para sersubstitudo pela aplicao de uma produo dagramticaA seqncia de reconhecimento mais direita, ourightmost parse, dada pelo reverso da seqncia deprodues associada derivao a seqncia de aplicao de produes para partir dasentena e alcanar o smbolo sentencialI NTRODUO COMPILAO 14. Derivaes cannicasExemploProdues EE +E1 EE E2 E(E) 3 Ev 4Derivaes cannicas para (v + v ) vSeqncia de reconhecimento mais esquerda:2, 3, 1, 4, 4, 4Seqncia de reconhecimento mais direita:4, 4, 1, 3, 4, 2I NTRODUO COMPILAO 15. rvores sintticas Representao das derivaes utilizadas no reconhecimento de uma sentena atravs de uma estrutura de rvore Em uma rvore sinttica:1. a raiz da rvore um n com o smbolo sentencial;2. as folhas da rvore so smbolos terminais, na mesma seqncia em que estes ocorrem na sentena analisada; e3. os ns intermedirios da rvore correspondem a smbolos no terminais, onde um n cujo rtulo P com lhos s1 , s2 , . . . , sn pode ocorrer apenas se houver uma regra P s1 s2 . . . sn na gramtica.I NTRODUO COMPILAO 16. rvores sintticasSubrvores para a gramtica de expressesE E EE E +E EE E EE + EE vE (E) E( E ) v I NTRODUO COMPILAO 17. rvore sinttica para (v + v ) v E E E v ( E ) E + E v v I NTRODUO COMPILAO 18. rvores sintticasRelao com derivaes cannicas Estrutura da rvore sinttica independe da seqncia de derivaes utilizada para reconhecimento Uma derivao cannica est associada estratgia utilizada para percorrer seqencialmente os elementos da rvorepr-ordem raiz antes das folhas, folhas da esquerda para a direitaseqncia de reconhecimento mais esquerdaps-ordem folhas da esquerda para a direita, raiz depoisdas folhasseqncia de reconhecimento mais direitaI NTRODUO COMPILAO 19. Gramticas ambguasGramtica ambgua se for possvel obter, para umasentena, mais de uma rvore sintticaDe modo equivalente, ambgua se houver mais que umaseqncia de reconhecimento mais direitaOu mais de uma seqncia de reconhecimento mais esquerdaOu ainda, mais de uma derivao cannica mais esquerdaOu mais de uma derivao cannica mais direitaI NTRODUO COMPILAO 20. Gramticas ambguasExemploConsidere a sentena v + v v em E E +E 1 E E E 2 E (E)3 E v4I NTRODUO COMPILAO 21. Gramticas ambguasExemplo: rvore 1 EE+ EvE E v vseqncia de reconhecimento mais esquerda 1, 4, 2, 4, 4seqncia de reconhecimento mais direita 4, 4, 4, 2, 1I NTRODUO COMPILAO 22. Gramticas ambguasExemplo: rvore 2EE EE + Evv vseqncia de reconhecimento mais esquerda 2, 1, 4, 4, 4seqncia de reconhecimento mais direita 4, 4, 1, 4, 2I NTRODUO COMPILAO 23. Verso no-ambgua da gramtica de expresses E E +M1 E M 2 M M P3 M P 4 P (E) 5 P v 6 I NTRODUO COMPILAO 24. Mesma sentena, na gramtica revistanica interpretao possvel para v + v vPor exemplo, para o reconhecimento descendente:E1 2E E +M M +M4 6E +MP +M v +M3 4MMPv +M P v +P P6 6v +v P v +v v P P vv vI NTRODUO COMPILAO 25. Analisadores sintticosProgramas que reconhecem automaticamente sentenasde uma dada gramtica livre de contexto Como para analisadores lxicos, um autmato uma representao abstrata para o analisador No entanto, para o analisador sinttico o autmato precisa de uma memria auxiliar:Pilha estrutura linear com poltica de acesso LIFO(Last In, First Out)I NTRODUO COMPILAO 26. Autmato de pilhaDenio formalSxtupla M = (K , , , , s, F ), na qual os elementos so:1. o conjunto nito de estados, K ;2. o alfabeto de entrada nito, ;3. o alfabeto de pilha nito, ;4. a funo de transio, : K K ;5. o estado inicial, s, s K ; e6. o conjunto de estados nais, F , com F K . I NTRODUO COMPILAO 27. Analisadores sintticosAnalisadores utilizam o autmato de pilha para reconhecersentenas de uma linguagem livre de contextoPodem usar a tcnica de construo descendente ouascendenteDescendente Pilha comea com smbolo sentencialAscendente Pilha comea vaziaExemplos de analisadoresAnalisador sinttico preditivo construo descendenteAnalisador de precedncia fraca construo ascendenteI NTRODUO COMPILAO 28. Analisador sinttico preditivo Analisador apropriado para gramticas LL(1) Varredura da sentena ocorre da esquerda para a direita (Left-to-right) Derivao cannica mais esquerda (Leftmost derivation) Um nico smbolo da sentena (lookahead) analisado a cada passo I NTRODUO COMPILAO 29. Analisador sinttico preditivoGramticas LL(1)Gramtica com produes A e A LL(1) se: 1. e no iniciam com o mesmo smbolo terminalOu com smbolos no-terminais cujas expanses iniciemcom o mesmo smbolo terminal2. S ou s tem expanses que levam string vazia3. Se leva string vazia, no inicia expanso com smbolo terminal que possa ocorrer imediatamente direita de AI NTRODUO COMPILAO 30. Analisador sinttico preditivoConverso de produes recursivasTcnica de construo descendente no pode ser aplicadaa gramticas com produes recursivas esquerdaSe houver produo dessa forma, necessrioconvert-la:Para De AA AAA A AA I NTRODUO COMPILAO 31. Construo do analisador sinttico preditivoUma tabela sinttica representa as operaes possveispara o autmato associado ao analisadorConstruo dessa tabela feita pela anlise de cadaproduoPara cada par smbolo no-terminal, smbolo terminal, atabela indica qual produo deve ser aplicada, se possvelSmbolo terminal o prximo smbolo da sentenaSmbolo no-terminal o smbolo no topo da pilhaAlm dos smbolos terminais, um delimitador de sentena(denotado aqui por $ ) uma entrada reconhecida pelatabelaI NTRODUO COMPILAO 32. Construo da tabela sinttica Para cada produo A B na gramtica, Insira a produo na tabela sinttica na linha A, coluna t, para cada smbolo terminal t que pode iniciar a expanso de B Se B = , ento insira a produo na tabela sinttica na linha A, coluna t para cada smbolo terminal t que pode ocorrer direita de A, sendo que: O delimitador $ pode estar direita do smbolo sentencial; t pode ser um smbolo terminal que inicia a expanso de um smbolo no-terminal que ocorre direita de A em alguma produo Para cada produo na forma A . . . B, os smbolos que podem ocorrer direita de A tambm podem ocorrer direita de BI NTRODUO COMPILAO 33. Construo da tabela sintticaExemploConsidere a construo do analisador sinttico preditivo para aseguinte gramtica de expresses:Gramtica original E E +M1 E M 2 M M P3 M P 4 P (E) 5 P v 6I NTRODUO COMPILAO 34. Construo da tabela sintticaConverso da gramticaInicialmente, preciso eliminar das produes da gramticaqualquer recurso esquerda:Gramtica equivalente sem recurso esquerdaE ME(1) E +ME(2) E (3) M PM (4) M PM(5) M (6)P (E) (7)Pv (8) I NTRODUO COM

Search related