1/18/2014comp - prof. paulemir campos1 upe – caruaru – sistemas de informação disciplina:...

29
06/18/22 Comp - Prof. Paulemir Campos 1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte 2)

Upload: internet

Post on 17-Apr-2015

108 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 1

UPE – Caruaru – Sistemas de InformaçãoDisciplina: CompiladoresProf.: Paulemir G. Campos

Análise Léxica(Parte 2)

Page 2: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 2

Roteiro da Aula Expressões Regulares

Autômato Finito

Referências

Page 3: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 3

Expressões Regulares

Page 4: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 4

Introdução Uma linguagem é um conjunto de

strings. Uma string é uma seqüência finita

de símbolos ou caracteres. Os símbolos ou caracteres fazem

parte do alfabeto finito de uma linguagem.

Page 5: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 5

Introdução No caso de linguagens de

programação, o alfabeto utilizado é o conjunto de caracteres ASCII.

Para facilitar a especificação de uma linguagem de programação, utiliza-se a notação de expressões regulares.

Page 6: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 6

Notação deExpressões Regulares Caracter: Para cada caracter a no

alfabeto da linguagem, a expressão regular a indica que a linguagem contém apenas a string “a”;

Page 7: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 7

Notação deExpressões Regulares Alternação: Dada duas

expressões regulares M e N, o operador de alternação “|” permite a construção de uma nova expressão regular M | N. Ex.: A linguagem de a | b contém as

duas string “a” e “b”.

Page 8: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 8

Notação deExpressões Regulares Concatenação: Dada duas

expressões regulares M e N, o operador de concatenação “.” permite a construção de uma nova expressão regular M . N. Ex.: A expressão regular (a | b). a

contém as duas string “aa” e “ba”.

Page 9: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 9

Notação deExpressões Regulares Epsilon: A expressão regular

representa uma string vazia.

Ex.: A expressão regular (a . b) | representa a linguagem { “ ”, “ab” }

Page 10: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 10

Notação deExpressões Regulares Repetição: Dada uma expressão

regular M, o fechamento de Kleene é representado por M*. Uma string está em M* se é a concatenação de nenhuma ou mais strings de M. Ex.: ((a | b) . a)* representa o conjunto

infinito { “ ”, “aa”, “ba”, “aaaa”, “baba”, “aaaaaa”, “bababa”, ...}

Page 11: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 11

Notação deExpressões Regulares Com esse conjunto básico de

operadores (caracter, alternação, concatenação, epsilon e repetição), pode-se especificar o conjunto de caracteres ASCII correspondente aos tokens (símbolos) léxicos de uma linguagem de programação.

Page 12: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 12

Notação deExpressões Regulares Na escrita de expressões

regulares, algumas vezes pode-se omitir os símbolos de concatenação ou .

Ex.: ab | c indica (a . b) | c (a |) indica (a | )

Page 13: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 13

Notação deExpressões Regulares Algumas outras abreviações:

[abcd] indica (a | b | c | d); [b-g] indica [bcdefg]; [b-gM-Qkr] indica

[bcdefgMNOPQkr]; M? indica (M | ); M+ indica (M.M*).

Page 14: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 14

Notação deExpressões Regulares Resumo:

a indica um caracter “a” indica string vazia espaço em branco também pode representar a string vazia M | N indica alternação, escolha de M ou

N M . N indica concatenação, M seguido de

N

Page 15: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 15

Notação deExpressões Regulares Resumo (Cont.):

MN também indica concatenação M* indica repetição (zero ou mais vezes) M+ indica repetição (uma ou mais vezes) M? indica zero ou uma ocorrência de M [a-zA-Z] indica alternação de conjunto de caracteres

Page 16: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 16

Notação deExpressões Regulares Resumo (Cont.):

. indica qualquer caracter (q. c.) único,

exceto símbolo de nova linha “a.+*” uma string entre aspas

duplas indica a própria string

Page 17: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 17

Notação deExpressões Regulares Exemplos:

if retorne(palavra_res, if) [a-z][a-z0-9]* retorne(identificador,

id) [0-9]+ retorne(inteiro,

num_int) ([0-9]+“.”[0-9]*)|([0-9]*“.”[0-9]+) retorne (real, num_real)

Page 18: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 18

Notação deExpressões Regulares Exemplos (Cont.):

(“--”[a-z]*“\n”)|(“ ” | “\n” | “\t” )+ * não faça nada * . ou q.c.

mostre(mensagem_erro)

Page 19: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 19

Considerações Deve-se definir o critério para

reconhecimento de caracteres do analisador léxico: Maior Símbolo Possível: Lê a maior

cadeia de caracteres possível que pode bater com a expressão regular de um símbolo léxico;

Regra de Prioridade: Lê caracteres até obter-se uma expressão regular de um símbolo léxico.

Page 20: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 20

Considerações Exemplo:

O símbolo if8 indica um identificador ou uma palavra reservada?

Resposta: Depende do critério do analisador léxico. Pelo “Maior Símbolo Possível”, if8 indica um identificador, mas, pela “Regra de Prioridade” if indica uma palavra reservada.

Page 21: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 21

Autômato Finito

Page 22: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 22

Introdução Apesar de Expressões Regulares

serem convenientes para especificar tokens léxicos, necessita-se de um formalismo que possa ser implementado como um programa de computador;

Um Autômato Finito pode ser utilizado para esta finalidade.

Page 23: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 23

Definição Um Autômato Finito tem:

Um conjunto finito de estado; Arcos ou arestas fazem a ligação de

um estado a outro; Cada arco é rotulado com um símbolo

ou caracter; Há um estado inicial e determinados

estados são rotulados de estados finais.

Page 24: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 24

Exemplos de Autômatos Finitos

1 2 33

i f

IF

1 22

a-z

ID

a-z, 0-9

1 22

0-9

Num_Int

0-91 33

0-9

Num_Real

2

0-9

.

0-9

4

0-9.

5

0-9

Page 25: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 25

Exemplos de Autômatos Finitos

1 22

q.c. – (a-z, 0-9, ., -,“ ”)

Erros

1 3

-

Espaço_Branco

2

-

a-z

5

“ ”, \n, \t

4

\n

“ ”, \n, \t

Comentário

Page 26: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 26

Autômato Finito Determinístico Num Autômato Finito

Determinístico (DFA – Deterministic Finite Automaton) nenhum dois arcos que saem de um mesmo estado são rotulados com um mesmo símbolo ou caracter.

Page 27: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 27

Autômato Finito Determinístico Um DFA pode ser utilizado para

aceitar ou rejeitar strings. A partir do estado inicial, para

cada caracter da string de entrada igual ao rótulo do arco de saída, avança-se pro próximo estado;

Page 28: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 28

Autômato Finito Determinístico Caso atinja-se o estado final de um

símbolo léxico, aceita-se a string; Caso contrário, ou em algum ponto

houver diferença entre caracter de entrada e rótulo do arco, rejeita-se a string.

Page 29: 1/18/2014Comp - Prof. Paulemir Campos1 UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte

04/11/23Comp - Prof. Paulemir

Campos 29

Referências Appel, A. W. Modern Compiler

Implementation in C. Cambridge University Press, 1998. (Capítulo 2, seções 2.2 e 2.3).