Escolar Documentos
Profissional Documentos
Cultura Documentos
e Autómatos
Vasco Pedro
Departamento de Informática
Universidade de Évora
2008/2009
Alfabeto, Palavra
Exemplos:
• {a, b, c, . . . , x, y, z}
• {0, 1, . . . , 9, +, −, ÷, ×, (, )}
• {InsereCartão, 0, 1, . . . , 9, Confirmar,
Corrigir, Anular, . . . }
Definição recursiva:
(base) λ ∈ Σ∗
1. se |u| = 0, então u = λ e uR = λ
v = xuy
Prefixo
• se x = λ então u é prefixo de v
Sufixo
• se y = λ então u é sufixo de v
(u, v, x, y ∈ Σ∗)
Vasco Pedro, LFA, UE, 2008/2009 4
Caracterização Finita de
Linguagens
• definição recursiva
– concatenação de linguagens
se X e Y forem linguagens
XY = X · Y = {xy | x ∈ X e y ∈ Y }
– exemplo
• seja X um conjunto
X∗ = Xn X+ = Xn
[ [
n≥0 n>0
em alternativa, X + = XX ∗
• exemplo
Linguagem Representada
L(∅) = ∅
L(λ) = {λ}
L(a) = {a} (a ∈ Σ)
L(uv) = L(u)L(v)
L(u∗) = L(u)∗
∅∗ = λ λ∗ = λ
u∪u=u u∗ = (u∗)∗
u(v ∪ w) = uv ∪ uw u∗ = λ ∪ uu∗
(u ∪ v)w = uw ∪ vw
(uv)∗u = u(vu)∗
= (u∗v ∗)∗
= (u∗v)∗u∗ = u∗(vu∗)∗
Vasco Pedro, LFA, UE, 2008/2009 10
Autómatos Finitos
Deterministas
Um autómato finito determinista (AFD)
é um tuplo M = (Q, Σ, δ, q0, F ) onde
δ̂(q0, w) ∈ F
L(M ) = {w | δ̂(q0, w) ∈ F }
• qi ∈ λ-fecho(qi)
δ̂(qi, u) ∈ F ≡ δ̂(qj , u) ∈ F
2. Enquanto existirem
p, p0 ∈ P a∈Σ qi, qj ∈ p
δ 0(p, a) = p0.
M 0 = (P, Σ, δ 0, q00 , F 0)
onde
• F 0 = {p ∈ P | p ⊆ F }.
• (q00 , λ, {q0} )
• uma transição λ de cada q ∈ F para qf
L = {anbn | n ≥ 0}
Se L for uma linguagem regular, existe um
AFD que a reconhece.
Como
uv 0w = aj (al )0ak−j−l bk = ak−l bk 6∈ L
porque l > 0 e k − l 6= k, L não é uma lingua-
gem regular.
Vasco Pedro, LFA, UE, 2008/2009 22-1
Gramáticas (1)
1. hfrasei → hsujeitoi hfrase-verbali
2. hfrasei → hsujeitoi hverboi hcompl-directoi
3. hsujeitoi → hsubst-próprioi
4. → hartigoi hsubst-comumi
5. hsubst-próprioi → John
6. → Jill
7. hsubst-comumi → car
8. → hamburger
9. hartigoi → a
10. → the
11. hfrase-verbali → hverboi hadvérbioi
12. → hverboi
13. hverboi → drives
14. → eats
15. hadvérbioi → slowly
16. → frequently
NB: V ∩ Σ = ∅.
uAv ⇒G uwv
u = u0 ⇒G u1 ⇒G . . . ⇒G un = v
então u deriva v em n passos
n
u ⇒G v
n
Se u ⇒G v para algum n ≥ 0, u deriva v
∗
u ⇒G v
(u, v, w ∈ (V ∪ Σ)∗)
v = w1 A1 w2 A2 . . . wk Ak wk+1
i t
1. Ai ⇒ pi
2. w = w1 p1 w2 p2 . . . wk pk wk+1
k
X
3. ti = n.
i=1
{aibj ck | i = j ou j = k}
E→E+E |E−E |T
T →T ×T |T ÷T |F
F →n
E→E+T |E−T |T
T →T ×F |T ÷F |F
F →n
A→a
A → aB
A→λ
onde A, B ∈ V e a ∈ Σ.
Transições:
• [q 0, λ] ∈ δ(q, a, λ)
[q, aw, α] ` [q 0, w, α]
• [q 0, λ] ∈ δ(q, a, A)
• [q 0, B] ∈ δ(q, a, λ)
• [q 0, B] ∈ δ(q, a, A)
[qj , λ] ∈ δ(qi, λ, A)
[qj , A] ∈ δ(qi, λ, λ)
tal que
u v i w xi y ∈ L, para todo o i ≥ 0.
G é uma gramática
∗
N = {w ∈ (V ∪ Σ)∗ | S ⇒L w}
A = {[v, w, r] ∈ N × N × P | v ⇒L w por
aplicação da produção r}
Sentido
• descendente (parte de S)
Estratégia
• em largura
• em profundidade
Se w = uAv, u ∈ Σ∗ e A ∈ V , u é o prefixo
terminal de w
G0 = G
G0 = (V ∪ {S 0}, Σ, P ∪ {S 0 → S}, S 0)
(S 0 6∈ V )
Gramática original:
Introdução de produções
∗
Se A ⇒G u, então G0 = (V, Σ, P ∪ {A → u}, S)
é equivalente a G.
3. A produção S → λ sse S ∈ Λ.
Λ = {L0, L, M, O}
CHAIN
L0 {L0, L}
L {L}
M {M, N }
N {N }
O {O}
L0 → λ | M b | aLb | b | ab
L → M b | aLb | b | ab
M → Lb | b
O → cO | c
• A → BC
• A→a
• S→λ
onde a ∈ Σ e B, C ∈ V − {S}.
1. L0 → λ | M B | ALB | b | AB
B→b
A→a
L → M B | ALB | b | AB
M → LB | b
• A → aA1A2 . . . An
• A→a
• S→λ
L0 → λ | M B | AX | b | AB
X → LB
B→b
A→a
L → M B | aX | b | aB
(M → M BB | aXB | bB | aBB | b)
M → aXBZ | bBZ | aBBZ | bZ |
aXB | bB | aBB | b
Z → BBZ | BB
(A1, A2, ∈ V e w ∈ V ∗)
A → Au
substituem-se as produções
A → v1Z | v2Z | . . . | vk Z | v1 | v2 | . . . | vk
Z → u1Z | u2Z | . . . | uj Z | u1 | u2 | . . . | uj
(ui, vi ∈ (V ∪ Σ)∗)
Vasco Pedro, LFA, UE, 2008/2009 53
Gramáticas LL(k)
Gramáticas LL(1)
A → uA0
e
A0 → v1 | v2 | . . . | vn
é equivalente a G.
Primeiros
Os primeiros de u ∈ (V ∪Σ)∗ são os sı́mbolos
do alfabeto que podem aparecer na primeira
posição de uma palavra derivada a partir de
u.
∗
PRIMEIROS(u) = {a | u ⇒ ax ∈ Σ∗}
Seguintes
Os seguintes de A ∈ V são os sı́mbolos do
alfabeto que podem aparecer a seguir a A
nalguma derivação.
SEGUINTES(A) =
∗
{a | S ⇒ uAv e a ∈ PRIMEIROS(v)}
(a ∈ Σ, x ∈ Σ∗ e u, v ∈ (V ∪ Σ)∗)
Vasco Pedro, LFA, UE, 2008/2009 57
Sı́mbolos Directores
DIR(A → w) ∩ DIR(A → v) = ∅
então a gramática é LL(1).
– Se u1 ∈ Λ, acrescenta-se também um
arco de A para u2;
PRIMEIROS(λ) = ∅
PRIMEIROS(uv) =
∗
PRIMEIROS(u) se u 6 ⇒ λ
= PRIMEIROS(u)
∗
∪ se u ⇒ λ
PRIMEIROS(v)
proc E()
se sı́mbolo-de-avanço ∈ {a, (} então
% E → TX
T()
X()
senão
erro()
proc T()
se sı́mbolo-de-avanço ∈ {a} então
% T →a
consome(a)
senão se sı́mbolo-de-avanço ∈ {(} então
% T → (E)
consome(()
E()
consome())
senão
erro()
Vasco Pedro, LFA, UE, 2008/2009 61-1
Analisador Sintáctico
Descendente Recursivo (2)
proc X()
se sı́mbolo-de-avanço ∈ {+} então
% X→Z
Z()
senão se sı́mbolo-de-avanço ∈ {), #} então
% X→λ
senão
erro()
proc consome(sı́mbolo)
se sı́mbolo-de-avanço = sı́mbolo então
se sı́mbolo-de-avanço 6= # então
sı́mbolo-de-avanço ← próximo-sı́mbolo()
senão
erro()
uw é um contexto-LR(0) de A → w ∈ P se
existe uma derivação direita
∗
S ⇒R uAv ⇒R uwv
Exemplo
GLR0 = ({S, X, Y }, {a, b, #}, PLR0 , S)
PLR0 : S → X# X → XY | λ Y → aY a | b
Contextos-LR(0)
S → X# X#
X → XY XY
X→λ λ
Y → aY a XaY a, XaaY a, . . . = Xa∗aY a
Y →b Xb, Xab, Xaab, . . . = Xa∗b
.
• A → u v, se A → uv ∈ P ;
.
• A → , se A → λ ∈ P .
.
Um item A → u v é válido para o prefixo
viável xu se xuv é um contexto-LR(0).
Exemplo
• I ⊆ fecho(I);
.
• se A → u Bv ∈ fecho(I), com B ∈ V ,
.
então B → w ∈ fecho(I) para todas as
produções B → w;
Exemplo
fecho({X → X Y }) = .
. .
{X → X Y, Y → aY a, Y → b} .
Vasco Pedro, LFA, UE, 2008/2009 64
Autómato Finito dos
Itens LR(0) Válidos
Seja G = (V, Σ, P, S) uma gramática indepen-
dente do contexto.
.
• q0 = fecho({S → w | S → w ∈ P })
δ(q, x) =
. .
fecho({A → ux v | A → u xv ∈ q})
.
A → u v, L
onde
.
• A → u v é um item LR(0), o núcleo, e
.
Um item A → u v, L é válido para xu se, para
todo o a ∈ L, existe uma derivação
∗
S ⇒R xAy
com a ∈ PRIMEIROS(y#).
• I ⊆ fecho1(I);
.
• se A → u Bv, L ∈ fecho1(I), com B ∈ V ,
.
então B → w, K ∈ fecho1(I) para todas
as produções B → w, com
( ∗
PRIMEIROS(v) se v 6⇒ λ
K= ∗
PRIMEIROS(v) ∪ L se v ⇒ λ
.
n o
fecho1( S → Ab A,{#} ) =
.
n o
S → Ab A,{#}
. .
n o
∪ A → Aa,{#}, A → ,{#}
∪ A → .Aa,{a}, A → .,{a}
n o
=
S → Ab.A, {#},
n
.
• q0 = fecho1({S 0 → S, {#}})
δ(q, x) =
. .
fecho1({A → ux v, L | A → u xv, L ∈ q})
S A a b a b #
0 1 2 A→λ A→λ
1 ACEITA
2 4 3 TRANSF TRANSF
3 5 A→λ A→λ
4 A → Aa A → Aa
5 6 TRANSF S → AbA
6 A → Aa A → Aa
(De acordo com o AFD dos itens LR(1) válidos obtido na aula.)
com
• FR = {q#}
λ
(q#, 1S0) −→ (q#, λ) Aceitação
λ
(qa, 0) −→ (qa, 2A0)
λ
−→
(qb, 0) (qb, 2A0)
λ
−→
(qa, 3) (qa, 5A3)
λ
−→
(q#, 3) (q#, 5A3)
λ Redução
(qa, 4a2A0) −→ (qa, 2A0)
λ
−→ (qb, 2A0)
(qb, 4a2A0)
λ
(q#, 5A3b2A0) −→
(q#, 1S0)
λ
−→
(qa, 6a5A3) (qa, 5A3)
λ
(q#, 6a5A3) −→ (q#, 5A3)
λ
(qa, 2) −→ (q, 4a2)
λ Transferência
(qb, 2) −→ (q, 3b2)
λ
(qa, 5) −→ (q, 6a5)
(De acordo com o AFD dos itens LR(1) válidos obtido na aula.)
com
• QA = {Q
d, Q
1
d };
d, . . . , Q
2 n
• δ A (Qi
d se δ(q, a) ∈ Q para q ∈ Q .
c , a) = Q
j j i
LR(0) (bis)
Valores DA (elementos d, e, f, . . . )
• A ⊆ DA
• se d, e ∈ DA, então (d.e) ∈ DA
• DA é o menor conjunto que satisfaz
os pontos anteriores.
Expressões
E → X (variável)
| d (valor)
| =? E E
| cons E E | hd E | tl E
Instruções
C → X := E | C; C | while E do C
Programas
read X; C; write Y
Vasco Pedro, LFA, UE, 2008/2009 79
Açúcar Sintáctico para a
Linguagem WHILE (1)
Booleanos
false ≡ nil
true ≡ (nil.nil)
if E then C1 else C2 ≡
Z := E;
W := true;
while Z do
{ Z := false; W := false; C1 };
while W do { W := false; C2 };
skip ≡ X := X
Vasco Pedro, LFA, UE, 2008/2009 79-1
Açúcar Sintáctico para a
Linguagem WHILE (2)
Listas
(e) ≡ (e . nil)
Naturais
0 ≡ nil
1 ≡ (nil.nil)
n ≡ (nil.n − 1)
Vasco Pedro, LFA, UE, 2008/2009 79-2
Açúcar Sintáctico para a
Linguagem WHILE (3)
Macros
Se p é o programa
read Xp;
Cp;
write Yp
então a instrução
W := p e;
é equivalente a
Xp := e;
Cp;
W := Yp;
read X;
Y := nil;
while X do
Y := cons (hd X) Y;
X := tl X;
write Y
(
(var 1)
(; (:= (var 2) (quote nil))
(while (var 1)
(; (:= (var 2)
(cons (hd (var 1)) (var 2)))
(:= (var 1) (tl (var 1))))))
(var 2)
)
Vasco Pedro, LFA, UE, 2008/2009 79-4
Problema de Decisão
Um problema de decisão é um problema
cujas instâncias têm resposta ‘sim’ ou ‘não’.
Exemplos
• x é um quadrado perfeito?
Instâncias:
0 é um quadrado perfeito?
1 é um quadrado perfeito?
2 é um quadrado perfeito?
...
Formalismos Equivalentes
Máquinas de Turing
Cálculo-λ
Funções recursivas
Sistemas de Post
Linguagem WHILE
Vasco Pedro, LFA, UE, 2008/2009 82
Problema da Terminação
(Halting Problem) (1)
Enunciado: O programa p termina quando
corre com dados d?
Exemplo
read Xp;
Cp;
write Yp
Seja p’ o programa:
read Xp;
Xp := d;
Cp;
write Yp
Seja t o programa:
Exemplos
• A GIC G é ambı́gua?