capítulo 2 análise léxica - ufop

39
1/23 Construção de Compiladores Capítulo 2 Análise Léxica José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.1

Upload: others

Post on 25-Jun-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capítulo 2 Análise Léxica - UFOP

1/23

Construção de Compiladores

Capítulo 2

Análise Léxica

José Romildo Malaquias

Departamento de ComputaçãoUniversidade Federal de Ouro Preto

2013.1

Page 2: Capítulo 2 Análise Léxica - UFOP

2/23

1 Análise Léxica

Page 3: Capítulo 2 Análise Léxica - UFOP

3/23

Layout

1 Análise Léxica

Page 4: Capítulo 2 Análise Léxica - UFOP

4/23

Análise léxica

I Análise léxica é o processo onde a sequência de caracteres queconstitui o progrma fonte é lida da esquerda para a direita eagrupada em tokens.

I Token é uma sequência de caracteres com um significado coletivo.I Usualmente há apenas um pequeno número de tokens para uma

linguagem de programação:constantes (inteiros, ponto-flutuante, caracteres, strings, etc.)operadores (aritméticos, relacionais, lógicos)sinais de pontuaçãopalavras reservadas

Page 5: Capítulo 2 Análise Léxica - UFOP

5/23

Analisador léxico

I O analisador léxico recebe um programa fonte como entrada eproduz uma sequência de tokens como saída.

analisador léxico

programa fonte(sequência de caracteres)

sequência de tokens

Page 6: Capítulo 2 Análise Léxica - UFOP

6/23

Exemplo de análise léxica

while (cont > 0)cont = cont - 2;

T_WhileT_LParenT_Identifier "cont"T_GtT_Integer 0T_RParenT_Identifier "cont"T_EqT_Identifier "cont"T_MinusT_Integer 2T_Semicolon

análiseléxica

Page 7: Capítulo 2 Análise Léxica - UFOP

7/23

Lexemas

I O analisador léxico pode reconhecer instâncias particulares detokens, tais como

3 ou 255 para um token constante inteira"Fred" ou "Wilma" para um token constante stringnumTicketes ou queue para um token nome de variável

I Instâncias específicas de um token são chamadas de lexemas.

I Um lexema é sequência de caracteres que forma o token.

I Um token é uma classe geral à qual o lexema pertence.

I Alguns tokens tem exatamente um lexema (exemplo: o caracter >)

I Outros tokens tem vários lexemas (como as constantes inteiras).

Page 8: Capítulo 2 Análise Léxica - UFOP

8/23

Tarefas do analisador léxico

O analisador léxico:

I Deve agrupar os caracteres da entrada em tokens válidos.

I Tem uma visão muito localizada do programa fonte, sem qualquercontexto.

I Logo não pode verificar por exemplo se:a sequência dos tokens está corretaum token ocorre em uma posição incorretaum identifiador foi declaradouma palavra-chave foi escrita erradamente

I Pode relatar por exemplo:caracter inválidp, a partir do qual não é possível formar nenhum tokenocorrências inválidas de caracteres em constantes stringsstrings não terminadascomentários não terminados

Page 9: Capítulo 2 Análise Léxica - UFOP

9/23

Tarefas do analisador léxico (cont.)

I Pode descartar os caracteres brancos e comentários que aparecementre os tokens.

I Pode realizar substituição de macros, compilação condicional ouinclusão de arquivos, embora estas tarefas possam ser maisapropriadas a um preprocessador que filtra a entrada antes depassá-la ao compilador.

Page 10: Capítulo 2 Análise Léxica - UFOP

10/23

Implementação de expressões regulares

I Expressões regulares podem ser implementadas usando autômatosfinitos.

I Há dois tipos de autômato finito:NFAs (autômato finito não-determinístico), eDFAs (autômato finito determinístico).

Page 11: Capítulo 2 Análise Léxica - UFOP

11/23

Autômatos finitos não determinísticos

I Um autômato finito não determinístico (NFA) é uma quíntupla

(S,Σ,δ,s0,F)

ondeS é um conjunto finito de estadosΣ é um alfabeto, um conjunto finito de símbolos de entradaδ é uma função de transição que dá para cada estado s ∈ S e paracada símbolo a em Σ∪{ε}, um conjunto de etados seguintesδ(s,a) ∈ P (S)s0 ∈ S é o estado inicialF ⊆ S é o conjunto de estados finais, que são distinguidos comoestados de aceitação

I O símbolo ε representando a cadeia vazia não é um elemento doalfabeto.

Page 12: Capítulo 2 Análise Léxica - UFOP

12/23

Exemplo de autômato finito

Autômato que reconhece L((a|b)?abb):

A = (Σ,S,δ,s0,F)

onde

Σ = {a,b} alfabeto

S = {0,1,2,3} conjunto de estados

δ = {(0,a)7→{0,1},(0,b)7→{b},(0,ε) 7→{},(1,a)7→{},(1,b)7→{2},(1,ε) 7→{},(2,a)7→{},(2,b)7→{3},(2,ε) 7→{} }

função de transição

s0 = 0 estado inicial

F = {3} conjunto de estados finais

Page 13: Capítulo 2 Análise Léxica - UFOP

13/23

Grafo de transição

I Um autômato finito pode ser representado por um grafo detransição onde

os nós representam os estadosas arestas rotuladas representam a função de transiçãoo estado inicial é indicado por uma aresta sem origemos estados finais são indicados por nós com bordas duplas

Page 14: Capítulo 2 Análise Léxica - UFOP

14/23

Tabela de transição

I Um autômato finito pode ser representado por uma tabela detransição onde

as linhas correspondem aos estadosas colunas correspondem aos símbolos de entrada e ε

a entrada da tabela para um determinado estado e um símbolo daentrada (ou ε) representa o valor da função de transição aplicada aesses argumentos

I Vantagem: as transições são facilmente encontradas.

I Desvantagem: ocupa muito espaço quando o alfabeto de entrada égrande, mesmo que muitos estados não tenham transições com amaioria dos símbolos da entrada (e ε).

Page 15: Capítulo 2 Análise Léxica - UFOP

15/23

Exemplo de autômato finito

Autômato que reconheceL((a|b)?abb):

A = (Σ,S,δ,s0,F)

Σ = {a,b}S = {0,1,2,3}δ = {(0,a)7→{0,1},

(0,b)7→{b},(0,ε) 7→{},(1,a)7→{},(1,b)7→{2},(1,ε) 7→{},(2,a)7→{},(2,b)7→{3},(2,ε) 7→{} }

s0 = 0F = {3}

Tabela de transições:

estado a b ε

0 {0,1} {0} {}1 {} {2} {}2 {} {3} {}3 {} {} {}

Grafo de transições:

0 1 2 3

a

b

a b b

Page 16: Capítulo 2 Análise Léxica - UFOP

16/23

Exemplo de autômato finito

Autômato que reconhece L(a∗ (a|b)):

1

2

3

ε

b

aa

Page 17: Capítulo 2 Análise Léxica - UFOP

17/23

Exemplo de autômato finito

Autômato que reconhece L((0|1)∗1):

A B

01

1

0

Page 18: Capítulo 2 Análise Léxica - UFOP

18/23

Exemplo de autômato finito

Autômato que reconhece L(aa∗ |bb∗):

s0

s1 s2

s3 s4

ε

ε

a

a

b

b

Page 19: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2 1 2 1 3ε a ε a ε a b

Page 20: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1

2 1 2 1 2 1 3ε a ε a ε a b

Page 21: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2

1 2 1 2 1 3

ε

a ε a ε a b

Page 22: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1

2 1 2 1 3

ε a

ε a ε a b

Page 23: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2

1 2 1 3

ε a ε

a ε a b

Page 24: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2 1

2 1 3

ε a ε a

ε a b

Page 25: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2 1 2

1 3

ε a ε a ε

a b

Page 26: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2 1 2 1

3

ε a ε a ε a

b

Page 27: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2 1 2 1 3ε a ε a ε a b

Page 28: Capítulo 2 Análise Léxica - UFOP

19/23

Aceitação de cadeias pelo autômato finito

I Um autômato finito aceita uma cadeia de entrada x se e somente sehouver algum caminho no grafo de transição do estado inicial paraum dos estados finais, de modo que os símbolos ao longo docaminho componham x.

I Exemplo: o autômato a seguir aceita a cadeia aaab:

1

2

3

ε

b

aa

1 2 1 2 1 2 1 3ε a ε a ε a b

Page 29: Capítulo 2 Análise Léxica - UFOP

20/23

Linguagem aceita por um autômato finito

I A linguagem L(A) definida (ou aceita) pelo autômato finito A é oconjunto de todas as cadeias rotulando algum caminho a partir doestado inicial até um estado final de A.

Page 30: Capítulo 2 Análise Léxica - UFOP

21/23

Simulação de um NFA

I Mantenha um conjunto de estados atuais, inicialmente dado peloestado inicial e todos os estados alcançados por transições vazias.

I Para cada caracter da entrada:Matenha um conjunto dos próximos estados, inicialmente vazio.Para cada estado atual:

Siga todas as transições rotuladas com o símbolo atual.Adicione estes estados ao conjunto de novos estados.

Adicione todo estado alcançado por transições vazias ao conjuntodos próximos estados.

I Complexidade: O(mn2) para cadeias de comprimento m eautômatos com n estados.

Page 31: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ” O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 32: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 33: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 34: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 35: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 36: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 37: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

Page 38: Capítulo 2 Análise Léxica - UFOP

22/23

Exemplo

s0 s1 s2” ”

a,b,c,...,z

” b o m ”

O autômato recebe uma cadeia comoentrada e decide aceitá-la ou rejeitá-la

aceita

Page 39: Capítulo 2 Análise Léxica - UFOP

23/23

Fim