Compiladores
Prof. Bruno Moreno
Aula 5 – 18/03/2011
Análise Léxica
Cadeias e Linguagens
Alfabeto e classe de caracteres
Qualquer conjunto finito de símbolos
{0,1}
Tabela ASCII
Cadeia
Seqüência finita de símbolos retirada de um
alfabeto
Termos utilizados: sentença ou palavra
Comprimento de cadeia
|s|
Cadeias e Linguagens
|banana| = 6
| |=0
Linguagem
Qualquer conjunto de cadeias sobre algum
alfabeto fixo
Operações em Linguagens
Concatenação
x = cão
y = casa
xy = cãocasa
x = x = {cão}
L0 = { }
x² = xx = {cãocão}
Operações em Linguagens
Concatenação
União
L* = zero ou mais concatenações de L
Um ou mais
L U M = {s | s está em L ou s está em M}
Zero ou mais
LM = {st | s está em L e t está em M}
L+ = uma ou mais concatenações de L
Zero ou uma ocorrência
L? = zerou ou uma concatenação de L
Operações em Linguagens
r* = r+ |
r? = r |
r+ = rr*
Partes de uma cadeia
Prefixo de s
s = banana
Prefixos: “ ” a “banana”; “bana”
Cadeia resultante da remoção de zero ou mais
símbolos da cauda (tail) da cadeia
Sufixo de s
s = banana
Sufixos: “ ” a “banana”; “na”
Cadeia resultante da remoção de zero ou mais
símbolos da cabeça (head) da cadeia
Partes de uma cadeia
Subcadeia de s
Cadeia obtida pela remoção de um prefixo e de
um sufixo de s
Exemplo
nan de banana
Subsequência de s
Qualquer cadeia formada pela remoção de zero
ou mais símbolos, não necessariamente
contíguos, de s
baaa de banana
Exemplo de uma linguagem
Seja L = {A, B, ..., Z, a, b, ..., z} e D = {0, ..., 9}
1. L U D
2. LD
Conjunto de letras e dígitos
Conjunto de cadeias formadas por uma letra seguida
de um dígito
A1, z4, D9, ...
3. L³
Conjunto de todas as cadeias com 3 letras
AaA, DGh, ...
Exemplo de uma linguagem
4. L*
, a cadeia
5. L(L U D)*
Conjunto de cadeia de letras, incluindo
cazia
Conjunto de qualquer letra seguida ou não por letras
ou dígitos
A, a6, aa, ...
6. D+
Conjunto de todas as cadeias com um ou mais dígitos
Expressões Regulares
Expressões Regulares
Permite definir claramente conjuntos
(cadeias) de um alfabeto
Exemplo
Identificadores em java
letra ( letra | digito ) *
Expressões Regulares
Exemplo: Seja ∑ = {a, b}
a|b
a
b
(a | b)(a | b)
aa
ab
ba
bb
Expressões Regulares
Exemplo: Seja ∑ = {a, b}
a*
{a | b}*
, a, b, aa, bb, aaa, bbb, ...
(a*b*)*
{ , a, aa, aaa, ...}
, a, b, aa, bb, aabb, abab
Zero ou mais a’s seguidos de um b
a*b
Expressões Regulares
Exemplo: Cadeia de letras e dígitos
começando por uma letra
letra → A | B | ... | Z | a | b | ... | z
dígito → 0 | 1 | ... | 9
id → letra ( letra | dígito )*
A
2p
numero
Reconhece!
Não Reconhece!
Reconhece!
Expressões Regulares
Exemplo: Números em Pascal são cadeias
como 5280, 39.37, 6.336E4 ou 1.894E-4
dígito → 0 | 1 | ... | 9
dígitos → dígito dígito*
fração_opcional → .dígitos |
expoente_opcional → (E(+|-| )dígitos) |
num → dígitos fração_opcional expoente_opcional
Expressões Regulares
Utilizando a notação + e ?
Expressões Regulares
Exemplo: Números em Pascal são cadeias
como 5280, 39.37, 6.336E4 ou 1.894E-4
dígito → 0 | 1 | ... | 9
dígitos → dígito dígito*
fração_opcional → .dígitos |
expoente_opcional → (E(+|-| )dígitos) |
num → dígitos fração_opcional expoente_opcional
Expressões Regulares
Exemplo: Números em Pascal são cadeias
como 5280, 39.37, 6.336E4 ou 1.894E-4
dígito → 0 | 1 | ... | 9
dígitos → dígito+
fração_opcional → (.dígitos)?
expoente_opcional → (E(+|-)?dígitos)?
num → dígitos fração_opcional expoente_opcional
Expressões Regulares
Classes de caracteres
[abc] = a | b | c
[a-z] = a | b | ... | z
[A-Za-z] [A-Za-z0-9]*
Análise de cadeias
Cada token é retornado ao passer quando
espaços em branco são detectados
Espaços
Tabulações
Avanços de linha
delim → branco | tabulação | fim de linha
espaço_em_branco → delim+
Exercícios
Em dupla
Próxima aula...
Diagrama de transições e
Autômatos