UPE – Caruaru – Sistemas de Informação
Disciplina: Compiladores
Prof.: Paulemir G. Campos
Análise Léxica
(Parte 2)
11/5/2015
Comp - Prof. Paulemir Campos
1
Roteiro da Aula

Expressões Regulares

Autômato Finito

Referências
11/5/2015
Comp - Prof. Paulemir Campos
2
Expressões Regulares
11/5/2015
Comp - Prof. Paulemir Campos
3
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.
11/5/2015
Comp - Prof. Paulemir Campos
4
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.
11/5/2015
Comp - Prof. Paulemir Campos
5
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”;
11/5/2015
Comp - Prof. Paulemir Campos
6
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.

11/5/2015
Ex.: A linguagem de a | b contém as duas
string “a” e “b”.
Comp - Prof. Paulemir Campos
7
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.

11/5/2015
Ex.: A expressão regular (a | b). a contém
as duas string “aa” e “ba”.
Comp - Prof. Paulemir Campos
8
Notação de
Expressões Regulares

Epsilon: A expressão regular 
representa uma string vazia.

11/5/2015
Ex.: A expressão regular (a . b) | 
representa a linguagem { “ ”, “ab” }
Comp - Prof. Paulemir Campos
9
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.

11/5/2015
Ex.: ((a | b) . a)* representa o conjunto
infinito { “ ”, “aa”, “ba”, “aaaa”, “baba”,
“aaaaaa”, “bababa”, ...}
Comp - Prof. Paulemir Campos
10
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.
11/5/2015
Comp - Prof. Paulemir Campos
11
Notação de
Expressões Regulares

Na escrita de expressões regulares,
algumas vezes pode-se omitir os
símbolos de concatenação ou .

11/5/2015
Ex.: ab | c indica (a . b) | c
(a |) indica (a | )
Comp - Prof. Paulemir Campos
12
Notação de
Expressões Regulares

Algumas outras abreviações:





11/5/2015
[abcd] indica (a | b | c | d);
[b-g] indica [bcdefg];
[b-gM-Qkr] indica [bcdefgMNOPQkr];
M? indica (M | );
M+ indica (M.M*).
Comp - Prof. Paulemir Campos
13
Notação de
Expressões Regulares

Resumo:





11/5/2015
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
Comp - Prof. Paulemir Campos
14
Notação de
Expressões Regulares

Resumo (Cont.):





11/5/2015
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
Comp - Prof. Paulemir Campos
15
Notação de
Expressões Regulares

Resumo (Cont.):


11/5/2015
. indica qualquer caracter (q. c.) único,
exceto símbolo de nova linha
“a.+*” uma string entre aspas duplas
indica a própria string
Comp - Prof. Paulemir Campos
16
Notação de
Expressões Regulares

Exemplos:




11/5/2015
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)
Comp - Prof. Paulemir Campos
17
Notação de
Expressões Regulares

Exemplos (Cont.):


11/5/2015
(“--”[a-z]*“\n”)|(“ ” | “\n” | “\t” )+
* não faça nada *
. ou q.c.
mostre(mensagem_erro)
Comp - Prof. Paulemir Campos
18
Considerações

Deve-se definir o critério para
reconhecimento de caracteres do
analisador léxico:


11/5/2015
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.
Comp - Prof. Paulemir Campos
19
Considerações

Exemplo:

11/5/2015
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.
Comp - Prof. Paulemir Campos
20
Autômato Finito
11/5/2015
Comp - Prof. Paulemir Campos
21
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.
11/5/2015
Comp - Prof. Paulemir Campos
22
Definição

Um Autômato Finito tem:




11/5/2015
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.
Comp - Prof. Paulemir Campos
23
Exemplos de
Autômatos Finitos
a-z, 0-9
i
f
1
2
a-z
3
1
2
IF
ID
0-9
0-9
.
0-9
0-9
1
0-9
1
2
.
2
3
0-9
0-9
4
Num_Int
5
Num_Real
11/5/2015
Comp - Prof. Paulemir Campos
24
Exemplos de
Autômatos Finitos
a-z
-
1
2
\n
3
4
Comentário
“ ”, \n, \t
“ ”, \n, \t
5
q.c. – (a-z, 0-9, ., -,“ ”)
Espaço_Branco
1
2
Erros
11/5/2015
Comp - Prof. Paulemir Campos
25
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.
11/5/2015
Comp - Prof. Paulemir Campos
26
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;
11/5/2015
Comp - Prof. Paulemir Campos
27
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.
11/5/2015
Comp - Prof. Paulemir Campos
28
Referências

Appel, A. W. Modern Compiler
Implementation in C. Cambridge
University Press, 1998. (Capítulo 2,
seções 2.2 e 2.3).
11/5/2015
Comp - Prof. Paulemir Campos
29
Download

analise_lexica2