Upload
internet
View
107
Download
1
Embed Size (px)
Citation preview
04/11/23Comp - Prof. Paulemir
Campos 1
UPE – Caruaru – Sistemas de InformaçãoDisciplina: CompiladoresProf.: Paulemir G. Campos
Análise Léxica(Parte 2)
04/11/23Comp - Prof. Paulemir
Campos 2
Roteiro da Aula Expressões Regulares
Autômato Finito
Referências
04/11/23Comp - Prof. Paulemir
Campos 3
Expressões Regulares
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.
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.
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”;
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”.
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”.
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” }
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”, ...}
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.
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 | )
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*).
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
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
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
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)
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)
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.
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.
04/11/23Comp - Prof. Paulemir
Campos 21
Autômato Finito
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.
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.
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
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
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.
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;
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.
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).