Click here to load reader

Compiladores 3

  • View
    1.234

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Text of Compiladores 3

  • 1. Anlise lxicaIvan Ricarte 2008 I NTRODUO COMPILAO

2. SumrioVarredura de tokensClassicao de tokens Autmatos nitos Construo dos autmatos nitosAlgoritmo de ThompsonConverso para autmato nito determinsticoMinimizao de estadosAnalisadores lxicosViso conceitualAspectos de implementaoGeradores de analisadores lxicos I NTRODUO COMPILAO 3. Compiladores: anlise lxica Reconhecimento, a partir dos caracteres, das palavras bsicas do vocabulrio do programa palavras-chaves da linguagem, operadores, identicadores, constantes elementos que podem ser adequadamente descritos por meio de gramticas regularesI NTRODUO COMPILAO 4. Anlise lxica Arquivo deanliseArquivo de ...sntesedestino origem lxica anlise EstruturasGramticasinternasI NTRODUO COMPILAO 5. Gramtica regular ou tipo 3RevisoApenas um smbolo no-terminal no lado esquerdo decada produoProdues recursivas no apresentam auto-incorporaoProduo recursiva: mesmo smbolo aparece do ladoesquerdo e do lado direitoSem auto-incorporao: o smbolo do lado esquerdoaparece apenas no incio ou no nal da seqncia desmbolos do lado direitoA linguagem regular descrita por uma gramtica tipo 3tambm pode ser descrita por meio de uma expressoregular I NTRODUO COMPILAO 6. Analisadores lxicos Programas que realizam a anlise lxica Duas atividades bsicas1. Obter grupos de caracteres, a partir do arquivo com contedo a ser analisado, que constituem strings vlidas em uma dada linguagemCada grupo de caracteres um token2. Identicar qual o tipo de tokenI NTRODUO COMPILAO 7. Varredura de tokensLeitura seqencial dos caracteres da entradaAgrupamento de caracteres reconhecido como um tokenda entradaUtiliza as facilidades oferecidas pelas linguagens deprogramao para leitura de arquivos I NTRODUO COMPILAO 8. Varredura de tokensRecursos da linguagem C++ Denies no arquivo de cabealho Leitura seqencial de arquivos com a classe ifstream Mtodos open, eof Cada token um objeto da classe string (arquivo de cabealho ) Leitura de tokens separados por brancos com o operador I NTRODUO COMPILAO 9. Varredura de tokensExemplo bsico#include #include ...ifstream arq;string token;...arq.open("nome_arquivo");...while (! arq.eof() )arq >> token;I NTRODUO COMPILAO 10. Classicao de tokensToken obtido precisa ser classicado um identicador, uma palavra-reservada, uma constante? ExtrairClassificarEntrada caracteres tokensstring token tipo de tokenI NTRODUO COMPILAO 11. Autmatos nitosO ncleo do analisador lxico uma implementao deum autmato nitomquina de estados nitos que aceita smbolos de umasentenaao nal da sentena, indica se ela vlida para agramtica ou noautmato denido para cada conjunto de smbolos quedeve ser reconhecidoCada tipo de token denido por uma lista ou por umagramtica regularI NTRODUO COMPILAO 12. Autmato nitoDenio formalAutmato descrito por uma quntuplaM = (K , , , s, F )K conjunto (nito) de estados alfabeto (nito) de entrada conjunto de transiess estado inicial, s KF conjunto de estados nais, F K I NTRODUO COMPILAO 13. Autmato nitoRepresentao grcaEstados e transio si a sf I NTRODUO COMPILAO 14. Autmato nitoRepresentao grcaEstados inicial e nais s0 as1bs2I NTRODUO COMPILAO 15. Autmato nitoRepresentao tabular s0 s1 s2 a s1 b s2 Estado inicial: s0Estados nais: s1 , s2I NTRODUO COMPILAO 16. Tipos de autmatosNo determinsticosA partir de um estado:pode haver transies para dois ou mais estadosdiferentes pela ocorrncia de um mesmo smbolo naentrada uma das transies escolhida se ocorrer aquele smbolo pode haver transio para outro(s) estado(s) sem a ocorrncia de nenhum smbolo transio pela string vazia I NTRODUO COMPILAO 17. Tipos de autmatosDeterminsticosTransio sempre ocorre pela ocorrncia de um smbolode entradaNo h transies pela string vaziaNo h alternativas distintas para a transio a partir deum dado estado e com um dado smbolo de entradaI NTRODUO COMPILAO 18. Construo dos autmatos nitosH um procedimento sistemtico para construir umautmato que reconhece strings de uma linguagemregular:Algoritmo de Thompson construo de um autmato nitono determinstico a partir de uma expressoregularMtodo da construo de subconjuntos converso doautmato nito no determinstico para umautmato nito determinstico equivalenteMinimizao de estados combinao de estadosredundantes do autmato para construir omenor autmato nito determinstico quereconhece as strings da linguagem regularespecicadaI NTRODUO COMPILAO 19. Algoritmo de ThompsonCompe um autmato nito no determinstico pelacombinao de pequenos autmatos que reconhecem oselementos primitivos de uma expresso regular: Um smbolo do alfabeto da linguagem Concatenao de duas expresses regulares Alternativa de duas expresses regulares Repetio (zero ou mais vezes) de uma expresso regularI NTRODUO COMPILAO 20. Algoritmo de ThompsonAutmato que reconhece um smbolo do alfabeto i fI NTRODUO COMPILAO 21. Algoritmo de Thompson Para as demais construes, dois autmatos sero combinados, um para a expresso regular R e outro para a expresso regular S: iR .....fR iS .....fSI NTRODUO COMPILAO 22. Algoritmo de ThompsonConcatenao de duas expresses regulares Autmato que reconhece RSiR.....fR iS ..... fS I NTRODUO COMPILAO 23. Algoritmo de ThompsonAlternativa de duas expresses regularesAutmato que reconhece R|S iR..... fR ifiS..... fS I NTRODUO COMPILAO 24. Algoritmo de ThompsonRepetio de uma expresso regular Autmato que reconhece R iRfR i .....fI NTRODUO COMPILAO 25. Algoritmo de ThompsonExemploAutmato nito no-determinstico para reconhecer tokens dalinguagem (0|1)*0: 1. Combinao de autmatos para reconhecer aconcatenao de (0|1)* e 0 2. Para reconhecer (0|1)*, um autmato para reconhecer arepetio de 0|1 3. Para reconhecer 0|1, um autmato para reconhecer aalternativa entre 0 e 1I NTRODUO COMPILAO 26. Algoritmo de ThompsonExemplo Autmato para (0|1)*0 0e3 e5 0e1 e2 e7 e8 e9 e10 1e4 e6 I NTRODUO COMPILAO 27. Converso para autmato nito determinsticoO mtodo da construo de subconjuntos Procedimento para converso de autmato nito no-determinstico (AFND) para autmato nito determinstico (AFD) que reconhece strings da mesma expresso regular Estados que podem ser alcanados a partir de outro por meio de transies pela string vazia so combinados num nico estadoConceito de de um subconjunto de estados do AFND I NTRODUO COMPILAO 28. O mtodo da construo de subconjuntos1. Obter estado inicialO estado inicial do AFD denido como a do conjuntocontendo apenas o estado inicial do AFND2. Obter novos estados e transiesCada estado obtido para o AFD analisado paradescobrir, para cada smbolo do alfabeto, suas transiesde sada e novos estados que so gerados3. Marcar estados naisCada estado do AFD que contenha em seu subconjuntoum estado nal do AFND ser um estado nal do AFD I NTRODUO COMPILAO 29. Converso para autmato nito determinsticoExemplo Converso do autmato para (0|1)*0 0e3 e5 0e1 e2 e7 e8 e9 e10 1e4 e6 I NTRODUO COMPILAO 30. Converso para autmato nito determinsticoExemploEstado inicial {e1}{e1, e2, e3, e4, e8, e9} : s0Transies a partir do estado s0s0 e1 e2 e3 e4e8 e9 0 e5 e10 1 e6 s0/0: {e5, e10} ={e2, e3, e4, e5, e7, e8, e9, e10} (s1) (nal)s0/1: {e6} ={e2, e3, e4, e6, e7, e8, e9}(s2)Estados s1, s2 devem ser analisados da mesma forma,assim como novos estados que surjam desta anliseI NTRODUO COMPILAO 31. Converso para autmato nito determinsticoExemplo: resultado 0s10 s0 101s21 I NTRODUO COMPILAO 32. Minimizao de estados Mtodo da construo de subconjuntos gera autmato nito determinstico Possivelmente, com estados redundantes Procedimento de minimizao permite obter autmato equivalente com menor nmero de estados Baseado no particionamento sucessivo do conjunto de estados I NTRODUO COMPILAO 33. Procedimento de minimizao de estados1. Particione o conjunto de estados do autmatoEm um grupo, estados que so naisNo outro grupo, todos os demais estados2. Avalie transies para os estados de cada grupoRenar particionamento: estados que tm transies paragrupos diferentes tm que ser colocados em (novos)grupos diferentes3. Combinar estados redundantesQuando todos os estados do grupo no mudam os gruposde destino quando transies so avaliadas, estados soredundantes um nico estado suciente paradescrever esse comportamento I NTRODUO COMPILAO 34. Minimizao de estadosExemploPara o autmato obtido para a expresso (0|1)*0 1. Partio inicial P1 = {C1 , C2 }, comC1 = {s1} C2 = {s0, s2} 2. Para a partio C2 :s0 s20 C1 C11 C2 C2 Estados s0, s2 so redundantesI NTRODUO COMPILAO 35. Minimizao de estadosExemplo: resultado1 C2 C10 10 I NTRODUO COMPILAO 36. Analisadores lxicos Autmato de reconhecimento de strings o ncleo do programa que faz a anlise lxica Analisador lxico O analisador lxico recebe o nome de um arquivo que contm uma seqncia de caracteres. Para cada token que extrado desse arquivo, retorna a indicao de se o token vlido e qual a sua classe. O analisador encerra a execuo normalmente aps a anlise do ltimo token. Caso algum token no seja reconhecido, o analisador indica a situao e passa ao prximo token, se possvel; caso contrrio, encerra a execuo. I NTRODUO COMPILAO 37. Elementos do analisador lxicoEstrutura que implementa o autmato deve contemplar1. O estado inicial para o autmato;2. Dado um estado qualquer, indicar se este um estado nal (condio de aceitao); e3. Dado um estado qualquer e um smbolo, a indicao de qual o prximo estado.I NTRODUO COMPILAO 38. Algoritmo do analisador lxico Obter estado Obter prximo inicialsmbolo[no h][h] Estado atual Prximo final?estado [sim] [no] [no h] [h]tokentoken no reconhecidoreconhecidoI NTRODUO COMPILAO 39. Aspectos de implementaoComo representar os elementos do analisador em C++ Smbolos variveis do tipo charEstados variveis do tipo intEstado inicial uma varivel do tipo intEstados nais um conjunto de variveis do tipo intset Transies uma seqncia de mapeamentos (um elementopor estado) de char (smbolo) para int (estado)vector< map >I NTRODUO COMPILAO 40. Geradores automticos possvel implementar analisadore

Search related