Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Análise Léxica (Parte 2)
UPE – Caruaru – Sistemas de Informação Disciplina: Compiladores Prof.: Paulemir G. Campos Análise Léxica (Parte 2) 3/25/2017 Comp - Prof. Paulemir Campos
2
Comp - Prof. Paulemir Campos
Roteiro da Aula Expressões Regulares Autômato Finito Referências 3/25/2017 Comp - Prof. Paulemir Campos
3
Comp - Prof. Paulemir Campos
Expressões Regulares 3/25/2017 Comp - Prof. Paulemir Campos
4
Comp - Prof. Paulemir Campos
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. 3/25/2017 Comp - Prof. Paulemir Campos
5
Comp - Prof. Paulemir Campos
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. 3/25/2017 Comp - Prof. Paulemir Campos
6
Notação de Expressõ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”; 3/25/2017 Comp - Prof. Paulemir Campos
7
Notação de Expressõ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”. 3/25/2017 Comp - Prof. Paulemir Campos
8
Notação de Expressõ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”. 3/25/2017 Comp - Prof. Paulemir Campos
9
Notação de Expressões Regulares
Epsilon: A expressão regular representa uma string vazia. Ex.: A expressão regular (a . b) | representa a linguagem { “ ”, “ab” } 3/25/2017 Comp - Prof. Paulemir Campos
10
Notação de Expressõ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”, ...} 3/25/2017 Comp - Prof. Paulemir Campos
11
Notação de Expressõ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. 3/25/2017 Comp - Prof. Paulemir Campos
12
Notação de Expressõ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 | ) 3/25/2017 Comp - Prof. Paulemir Campos
13
Notação de Expressõ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*). 3/25/2017 Comp - Prof. Paulemir Campos
14
Notação de Expressõ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 3/25/2017 Comp - Prof. Paulemir Campos
15
Notação de Expressõ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 3/25/2017 Comp - Prof. Paulemir Campos
16
Notação de Expressõ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 3/25/2017 Comp - Prof. Paulemir Campos
17
Notação de Expressõ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) 3/25/2017 Comp - Prof. Paulemir Campos
18
Notação de Expressões Regulares
Exemplos (Cont.): (“--”[a-z]*“\n”)|(“ ” | “\n” | “\t” )+ * não faça nada * . ou q.c mostre(mensagem_erro) 3/25/2017 Comp - Prof. Paulemir Campos
19
Comp - Prof. Paulemir Campos
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. 3/25/2017 Comp - Prof. Paulemir Campos
20
Comp - Prof. Paulemir Campos
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. 3/25/2017 Comp - Prof. Paulemir Campos
21
Comp - Prof. Paulemir Campos
Autômato Finito 3/25/2017 Comp - Prof. Paulemir Campos
22
Comp - Prof. Paulemir Campos
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. 3/25/2017 Comp - Prof. Paulemir Campos
23
Comp - Prof. Paulemir Campos
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. 3/25/2017 Comp - Prof. Paulemir Campos
24
Exemplos de Autômatos Finitos
a-z, 0-9 i f a-z 1 2 3 1 2 3 2 IF ID 0-9 0-9 0-9 . 0-9 1 2 3 3 0-9 1 2 2 . 0-9 0-9 4 Num_Int 5 Num_Real 3/25/2017 Comp - Prof. Paulemir Campos
25
Exemplos de Autômatos Finitos
a-z - - \n 1 2 3 4 Comentário “ ”, \n, \t “ ”, \n, \t 5 Espaço_Branco q.c. – (a-z, 0-9, ., -,“ ”) 1 2 2 Erros 3/25/2017 Comp - 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. 3/25/2017 Comp - 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; 3/25/2017 Comp - 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. 3/25/2017 Comp - Prof. Paulemir Campos
29
Comp - Prof. Paulemir Campos
Referências Appel, A. W. Modern Compiler Implementation in C. Cambridge University Press, (Capítulo 2, seções 2.2 e 2.3). 3/25/2017 Comp - Prof. Paulemir Campos
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.