(.dígitos)? - Bruno Moreno

Propaganda
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
Download