UPE Caruaru Sistemas de Informao Disciplina Compiladores Prof

  • Slides: 29
Download presentation
UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof. : Paulemir G. Campos

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

Roteiro da Aula n Expressões Regulares n Autômato Finito n Referências 9/18/2020 Comp -

Roteiro da Aula n Expressões Regulares n Autômato Finito n Referências 9/18/2020 Comp - Prof. Paulemir Campos 2

Expressões Regulares 9/18/2020 Comp - Prof. Paulemir Campos 3

Expressões Regulares 9/18/2020 Comp - Prof. Paulemir Campos 3

Introdução n n n Uma linguagem é um conjunto de strings. Uma string é

Introdução n n n 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. 9/18/2020 Comp - Prof. Paulemir Campos 4

Introdução n n No caso de linguagens de programação, o alfabeto utilizado é o

Introdução n n 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. 9/18/2020 Comp - Prof. Paulemir Campos 5

Notação de Expressões Regulares n Caracter: Para cada caracter a no alfabeto da linguagem,

Notação de Expressões Regulares n Caracter: Para cada caracter a no alfabeto da linguagem, a expressão regular a indica que a linguagem contém apenas a string “a”; 9/18/2020 Comp - Prof. Paulemir Campos 6

Notação de Expressões Regulares n Alternação: Dada duas expressões regulares M e N, o

Notação de Expressões Regulares n 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. n Ex. : A linguagem de a | b contém as duas string “a” e “b”. 9/18/2020 Comp - Prof. Paulemir Campos 7

Notação de Expressões Regulares n Concatenação: Dada duas expressões regulares M e N, o

Notação de Expressões Regulares n 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. n Ex. : A expressão regular (a | b). a contém as duas string “aa” e “ba”. 9/18/2020 Comp - Prof. Paulemir Campos 8

Notação de Expressões Regulares n Epsilon: A expressão regular representa uma string vazia. n

Notação de Expressões Regulares n Epsilon: A expressão regular representa uma string vazia. n Ex. : A expressão regular (a. b) | representa a linguagem { “ ”, “ab” } 9/18/2020 Comp - Prof. Paulemir Campos 9

Notação de Expressões Regulares n Repetição: Dada uma expressão regular M, o fechamento de

Notação de Expressões Regulares n 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. n Ex. : ((a | b). a)* representa o conjunto infinito { “ ”, “aa”, “ba”, “aaaa”, “baba”, “aaaaaa”, “bababa”, . . . } 9/18/2020 Comp - Prof. Paulemir Campos 10

Notação de Expressões Regulares n Com esse conjunto básico de operadores (caracter, alternação, concatenação,

Notação de Expressões Regulares n 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. 9/18/2020 Comp - Prof. Paulemir Campos 11

Notação de Expressões Regulares n Na escrita de expressões regulares, algumas vezes pode-se omitir

Notação de Expressões Regulares n Na escrita de expressões regulares, algumas vezes pode-se omitir os símbolos de concatenação ou . n Ex. : ab | c indica (a. b) | c (a |) indica (a | ) 9/18/2020 Comp - Prof. Paulemir Campos 12

Notação de Expressões Regulares n Algumas outras abreviações: n n n [abcd] indica (a

Notação de Expressões Regulares n Algumas outras abreviações: n n n [abcd] indica (a | b | c | d); [b-g] indica [bcdefg]; [b-g. M-Qkr] indica [bcdefg. MNOPQkr]; M? indica (M | ); M+ indica (M. M*). 9/18/2020 Comp - Prof. Paulemir Campos 13

Notação de Expressões Regulares n Resumo: n n n a indica um caracter “a”

Notação de Expressões Regulares n Resumo: n n n 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 9/18/2020 Comp - Prof. Paulemir Campos 14

Notação de Expressões Regulares n Resumo (Cont. ): n n n MN também indica

Notação de Expressões Regulares n Resumo (Cont. ): n n n 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-z. A-Z] indica alternação de conjunto de caracteres 9/18/2020 Comp - Prof. Paulemir Campos 15

Notação de Expressões Regulares n Resumo (Cont. ): n n . indica qualquer caracter

Notação de Expressões Regulares n Resumo (Cont. ): n n . indica qualquer caracter (q. c. ) único, exceto símbolo de nova linha “a. +*” uma string entre aspas duplas indica a própria string 9/18/2020 Comp - Prof. Paulemir Campos 16

Notação de Expressões Regulares n Exemplos: n n if retorne(palavra_res, if) [a-z][a-z 0 -9]*

Notação de Expressões Regulares n Exemplos: n n if retorne(palavra_res, if) [a-z][a-z 0 -9]* retorne(identificador, id) [0 -9]+ retorne(inteiro, num_int) ([0 -9]+“. ”[0 -9]*)|([0 -9]*“. ”[0 -9]+) retorne (real, num_real) 9/18/2020 Comp - Prof. Paulemir Campos 17

Notação de Expressões Regulares n Exemplos (Cont. ): n n (“--”[a-z]*“n”)|(“ ” | “n”

Notação de Expressões Regulares n Exemplos (Cont. ): n n (“--”[a-z]*“n”)|(“ ” | “n” | “t” )+ * não faça nada * . ou q. c. mostre(mensagem_erro) 9/18/2020 Comp - Prof. Paulemir Campos 18

Considerações n Deve-se definir o critério para reconhecimento de caracteres do analisador léxico: n

Considerações n Deve-se definir o critério para reconhecimento de caracteres do analisador léxico: n n 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. 9/18/2020 Comp - Prof. Paulemir Campos 19

Considerações n Exemplo: n O símbolo if 8 indica um identificador ou uma palavra

Considerações n Exemplo: n O símbolo if 8 indica um identificador ou uma palavra reservada? Resposta: Depende do critério do analisador léxico. Pelo “Maior Símbolo Possível”, if 8 indica um identificador, mas, pela “Regra de Prioridade” if indica uma palavra reservada. 9/18/2020 Comp - Prof. Paulemir Campos 20

Autômato Finito 9/18/2020 Comp - Prof. Paulemir Campos 21

Autômato Finito 9/18/2020 Comp - Prof. Paulemir Campos 21

Introdução n n Apesar de Expressões Regulares serem convenientes para especificar tokens léxicos, necessita-se

Introdução n n 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. 9/18/2020 Comp - Prof. Paulemir Campos 22

Definição n Um Autômato Finito tem: n n Um conjunto finito de estado; Arcos

Definição n Um Autômato Finito tem: n n 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. 9/18/2020 Comp - Prof. Paulemir Campos 23

Exemplos de Autômatos Finitos a-z, 0 -9 i f 1 2 a-z 3 1

Exemplos de Autômatos Finitos a-z, 0 -9 i f 1 2 a-z 3 1 2 IF ID 0 -9 1 2 . 4 Num_Int 9/18/2020 Comp - Prof. Paulemir Campos eal 2 3 0 -9 5 Num_R 24

Exemplos de Autômatos Finitos a-z - 1 2 n 3 4 Comentário “ ”,

Exemplos de Autômatos Finitos a-z - 1 2 n 3 4 Comentário “ ”, n, t 5 nco Espaço_Bra q. c. – (a-z, 0 -9, . , -, “ ”) 1 2 Erros 9/18/2020 Comp - Prof. Paulemir Campos 25

Autômato Finito Determinístico n Num Autômato Finito Determinístico (DFA – Deterministic Finite Automaton) nenhum

Autômato Finito Determinístico n 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. 9/18/2020 Comp - Prof. Paulemir Campos 26

Autômato Finito Determinístico n n Um DFA pode ser utilizado para aceitar ou rejeitar

Autômato Finito Determinístico n n 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; 9/18/2020 Comp - Prof. Paulemir Campos 27

Autômato Finito Determinístico n n Caso atinja-se o estado final de um símbolo léxico,

Autômato Finito Determinístico n n 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. 9/18/2020 Comp - Prof. Paulemir Campos 28

Referências n Appel, A. W. Modern Compiler Implementation in C. Cambridge University Press, 1998.

Referências n Appel, A. W. Modern Compiler Implementation in C. Cambridge University Press, 1998. (Capítulo 2, seções 2. 2 e 2. 3). 9/18/2020 Comp - Prof. Paulemir Campos 29