13
Aula 7 1 Análise Lexical Compiladores, Aula Nº 7 João M. P. Cardoso

Análise Lexical

  • Upload
    halen

  • View
    84

  • Download
    2

Embed Size (px)

DESCRIPTION

Análise Lexical. Compiladores, Aula Nº 7 João M. P. Cardoso. Da Expressão Regular ao Autómato. Tradução da Expressão Regular para um Autómato Implementação do Autómato. Da Expressão Regular ao Autómato. Construção por indução estrutural Dada uma expressão regular r arbitrária, - PowerPoint PPT Presentation

Citation preview

Page 1: Análise Lexical

Aula 71

Análise Lexical

Compiladores, Aula Nº 7

João M. P. Cardoso

Page 2: Análise Lexical

Aula 72

Da Expressão Regular ao Autómato

Tradução da Expressão Regular para um Autómato

Implementação do Autómato

Page 3: Análise Lexical

Aula 73

Da Expressão Regular ao Autómato

Construção por indução estrutural Dada uma expressão regular r arbitrária, Assumir que podemos convertê-la para um

autómato com Um estado início Um estado de aceitação

Mostrar como converter todas as construções de expressões regulares para produzir um autómato com Um estado de início Um estado de aceitação

Page 4: Análise Lexical

Aula 74

Construtores Básicos

aa

Page 5: Análise Lexical

Aula 75

Sequência

r1.r2

r1 r2

Page 6: Análise Lexical

Aula 76

Selecção

r1 | r2

r1

r2

Page 7: Análise Lexical

Aula 77

Asterisco de Kleene

r*

r

Page 8: Análise Lexical

Aula 78

Regras de Conversão

r1 r2

r1.r2

r1

r2

r1 | r2

r

r*a a

Page 9: Análise Lexical

Aula 79

Conversão

A conversão de uma expressão regular para um autómato baseada nas regras apresentadas produz um NFA

Nós queremos ter um DFA para facilitar o algoritmo de reconhecimento

Pode-se converter do NFA para o DFA o DFA pode ser exponencialmente maior do

que o NFA• Teoricamente um NFA com N estados pode

originar um DFA com 2N-1 estados A optimização do DFA resultante envolveria

eliminação de estados equivalentes

Page 10: Análise Lexical

Aula 710

Conversão NFA para DFA

O DFA tem um estado para cada subconjunto de estados no NFA O estado início do DFA corresponde ao conjunto de estados

alcançáveis seguindo as transições do estado início no NFA Um estado do DFA é de aceitação se um estado de aceitação do

NFA está no conjunto de estados agrupados Para determinar a transição despoletada pelo símbolo “a” de um dado

estado D do DFA Colocar S como conjunto vazio Encontrar o conjunto N de estados D no NFA

• Para todos os estados do NFA em N• Determinar o conjunto de estados N’ em que o NFA pode

estar depois de reconhecer “a”• Actualizar S com a união de S com N’

Se S não é vazio, há uma transição para “a” de D para o estado no DFA que tem o conjunto de estados S do NFA

Caso contrário, não há nenhuma transição “a” de D

Page 11: Análise Lexical

Aula 711

NFA para DFA Exemplo: (0 | 1)*.(0|1)*

1 2

3

4

5

6

1

0

7

8

9 10

11

12

13

14

1

0

15

16

.

1,2,3,4,8

5,7,2,3,4,8

6,7,2,3,4,8

9,10,11,12,16

13,15,10,11,12,16

14,15,10,11,12,16

1

0

1

0

10

10

00

1 1

Page 12: Análise Lexical

Aula 712

Estrutura Lexical nas Linguagens

Cada linguagem tem várias categorias de palavras. Numa linguagem de programação: Palavras chave (if, while) Operações aritméticas (+, -, *, /) Números inteiros (1, 2, 45, 67) Números em vírgula flutuante (1.0, .2, 3.337) Identificadores (abc, i, j, ab345)

Tipicamente tem-se uma categoria lexical para cada palavra chave e/ou categoria

Cada categoria lexical é definida por expressões regulares

Page 13: Análise Lexical

Aula 713

Exemplo de Categorias Lexicais (exemplo)

Palavra_chave_if = if Palavra_chave_while = while Operador = +|-|*|/ Inteiro = [0-9] [0-9]* Float = [0-9]*. [0-9]* Identificador = [a-z]([a-z]|[0-9])* Na análise sintáctica vamos utilizar

estas categorias