Construção de Compildores Cpítulo 2 Análise Léxic José Romildo Mlquis Deprtmento de Computção Universidde Federl de Ouro Preto 2014.1 1/23
1 Análise Léxic 2/23
Tópicos 1 Análise Léxic 3/23
Análise léxic Análise léxic é o processo onde sequênci de crcteres que constitui o progrm fonte é lid d esquerd pr direit e grupd em tokens. Token é um sequênci de crcteres com um significdo coletivo. Usulmente há pens um pequeno número de tokens pr um lingugem de progrmção: constntes (inteiros, ponto-flutunte, crcteres, strings, etc.) operdores (ritméticos, relcionis, lógicos) sinis de pontução plvrs reservds 4/23
Anlisdor léxico O nlisdor léxico recebe um progrm fonte como entrd e produz um sequênci de tokens como síd. progrm fonte (sequênci de crcteres) nlisdor léxico sequênci de tokens 5/23
Exemplo de nálise léxic while (cont > 0) cont = cont - 2; nálise léxic T_While T_LPren T_Identifier "cont" T_Gt T_Integer 0 T_RPren T_Identifier "cont" T_Eq T_Identifier "cont" T_Minus T_Integer 2 T_Semicolon 6/23
Lexems O nlisdor léxico pode reconhecer instâncis prticulres de tokens, tis como 3 ou 255 pr um token constnte inteir "Fred" ou "Wilm" pr um token constnte string numticketes ou queue pr um token nome de vriável Instâncis específics de um token são chmds de lexems. Um lexem é sequênci de crcteres que form o token. Um token é um clsse gerl à qul o lexem pertence. Alguns tokens tem extmente um lexem (exemplo: o crcter >) Outros tokens tem vários lexems (como s constntes inteirs). 7/23
Trefs do nlisdor léxico O nlisdor léxico: Deve grupr os crcteres d entrd em tokens válidos. Tem um visão muito loclizd do progrm fonte, sem qulquer contexto. Logo não pode verificr por exemplo se: sequênci dos tokens está corret um token ocorre em um posição incorret um identifidor foi declrdo um plvr-chve foi escrit errdmente Pode reltr por exemplo: crcter inválidp, prtir do qul não é possível formr nenhum token ocorrêncis inválids de crcteres em constntes strings strings não terminds comentários não termindos 8/23
Trefs do nlisdor léxico (cont.) Pode descrtr os crcteres brncos e comentários que precem entre os tokens. Pode relizr substituição de mcros, compilção condicionl ou inclusão de rquivos, embor ests trefs possm ser mis proprids um preprocessdor que filtr entrd ntes de pssá-l o compildor. 9/23
Implementção de expressões regulres Expressões regulres podem ser implementds usndo utômtos finitos. Há dois tipos de utômto finito: NFAs (utômto finito não-determinístico), e DFAs (utômto finito determinístico). 10/23
Autômtos finitos não determinísticos Um utômto finito não determinístico (NFA) é um quíntupl onde (S,Σ, δ,s 0,F) S é um conjunto finito de estdos Σ é um lfbeto, um conjunto finito de símbolos de entrd δ é um função de trnsição que dá pr cd estdo s S e pr cd símbolo em Σ {ɛ}, um conjunto de etdos seguintes δ(s,) P(S) s 0 S é o estdo inicil F S é o conjunto de estdos finis, que são distinguidos como estdos de ceitção O símbolo ɛ representndo cdei vzi não é um elemento do lfbeto. 11/23
Exemplo de utômto finito Autômto que reconhece L(( b) bb): onde A = (Σ,S, δ,s 0,F) Σ = {,b} S = {0,1,2,3} δ = {(0,) {0,1}, (0, b) {b}, (0,ɛ) {}, (1,) {}, (1, b) {2}, (1,ɛ) {}, (2,) {}, (2, b) {3}, (2,ɛ) {} } s 0 = 0 F = {3} lfbeto conjunto de estdos função de trnsição estdo inicil conjunto de estdos finis 12/23
Grfo de trnsição Um utômto finito pode ser representdo por um grfo de trnsição onde os nós representm os estdos s rests rotulds representm função de trnsição o estdo inicil é indicdo por um rest sem origem os estdos finis são indicdos por nós com bords dupls 13/23
Tbel de trnsição Um utômto finito pode ser representdo por um tbel de trnsição onde s linhs correspondem os estdos s coluns correspondem os símbolos de entrd e ɛ entrd d tbel pr um determindo estdo e um símbolo d entrd (ou ɛ) represent o vlor d função de trnsição plicd esses rgumentos Vntgem: s trnsições são fcilmente encontrds. Desvntgem: ocup muito espço qundo o lfbeto de entrd é grnde, mesmo que muitos estdos não tenhm trnsições com miori dos símbolos d entrd (e ɛ). 14/23
Exemplo de utômto finito Autômto que reconhece L(( b) bb): A = (Σ,S, δ,s 0,F) Σ = {,b} S = {0,1,2,3} δ = {(0,) {0,1}, (0, b) {b}, (0,ɛ) {}, (1,) {}, (1, b) {2}, (1,ɛ) {}, (2,) {}, (2, b) {3}, (2,ɛ) {} } s 0 = 0 F = {3} Tbel de trnsições: estdo b ɛ 0 {0,1} {0} {} 1 {} {2} {} 2 {} {3} {} 3 {} {} {} Grfo de trnsições: b b 0 1 2 3 b 15/23
Exemplo de utômto finito Autômto que reconhece L( ( b)): 2 ɛ b 1 3 16/23
Exemplo de utômto finito Autômto que reconhece L((0 1) 1): 0 1 1 A B 0 17/23
Exemplo de utômto finito Autômto que reconhece L( bb ): ɛ s 1 s 2 s 0 ɛ b b s 3 s 4 18/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 1 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ 1 2 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ 1 2 1 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ ɛ 1 2 1 2 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ ɛ 1 2 1 2 1 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ ɛ ɛ 1 2 1 2 1 2 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ ɛ ɛ 1 2 1 2 1 2 1 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ ɛ ɛ b 1 2 1 2 1 2 1 3 19/23
Aceitção de cdeis pelo utômto finito Um utômto finito ceit um cdei de entrd x se e somente se houver lgum cminho no grfo de trnsição do estdo inicil pr um dos estdos finis, de modo que os símbolos o longo do cminho componhm x. Exemplo: o utômto seguir ceit cdei b: ɛ 2 1 b 3 ɛ ɛ ɛ b 1 2 1 2 1 2 1 3 19/23
Lingugem ceit por um utômto finito A lingugem L (A) definid (ou ceit) pelo utômto finito A é o conjunto de tods s cdeis rotulndo lgum cminho prtir do estdo inicil té um estdo finl de A. 20/23
Simulção de um NFA Mntenh um conjunto de estdos tuis, inicilmente ddo pelo estdo inicil e todos os estdos lcnçdos por trnsições vzis. Pr cd crcter d entrd: Mtenh um conjunto dos próximos estdos, inicilmente vzio. Pr cd estdo tul: Sig tods s trnsições rotulds com o símbolo tul. Adicione estes estdos o conjunto de novos estdos. Adicione todo estdo lcnçdo por trnsições vzis o conjunto dos próximos estdos. Complexidde: O(mn 2 ) pr cdeis de comprimento m e utômtos com n estdos. 21/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m O utômto recebe um cdei como entrd e decide ceitá-l ou rejeitá-l 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m 22/23
Exemplo,b,c,...,z s 0 s 1 s 2 b o m ceit 22/23
Fim 23/23