Recognizing Viable Prefixes

Recognizing Viable Prefixes
Branislav Rovan
March 29, 2011
Recognizing Viable Prefixes
NFA Recognizing Viable Prefixes
Example
G = ({S 0 , S, A}, {a, b, c}, P, S 0 ),
P : S 0 → Sc, S → SA | A,
A → aSb | ab
LR(0) items
S0 →
S0 →
S0 →
.Sc
S .c
Sc .
S
→
S
→
S
→
S
→
S
→
.SA
S .A
SA.
.A
A.
A →
A →
A →
A →
A →
A →
A →
.aSb
a.Sb
aS .b
aSb .
.ab
a .b
ab .
S 0 ⇒ Sc ⇒ SAc ⇒ S |{z}
aSb c
handle
2/6
Recognizing Viable Prefixes
NFA Recognizing Viable Prefixes
LR(0) items
S0 →
S0 →
S0 →
.Sc
S .c
Sc .
S
→
S
→
S
→
S
→
S
→
.SA
S .A
SA.
.A
A.
A →
A →
A →
A →
A →
A →
A →
.aSb
a.Sb
aS .b
aSb .
.ab
a .b
ab .
←
S 0 ⇒ Sc ⇒ SAc ⇒ S |{z}
aSb c
handle
Viable prefix ε, S, Sa, SaS, SaSb
Valid for
↑
2/6
Recognizing Viable Prefixes
NFA Recognizing Viable Prefixes
NFA Recognizing Viable Prefixes
ε
q0
ε
S
S 0 → .Sc
S 0 → S.c
ε
ε
ε
A
S → .SA
S → .A
ε
S
ε
S → S.A
A
ε
S → SA.
ε
A → .aSb
a
A → a.Sb
S
A → aS.b
b
A → aSb.
c
S 0 → Sc.
S → A.
ε
ε
A → .ab
a
A → a.b
b
A → ab.
3/6
Recognizing Viable Prefixes
DFA Recognizing Viable Prefixes
DFA For Viable Prefixes
S
I0
A
a
I7
I1 :
I2 :
I3 :
I6 :
I7 :
I5
b
I8
a
. S → .A, A → .aSb, A → .ab
S → S .c, S → S .A, A → .aSb, A → .ab
S → A.
I : S → Sc .
I : S → SA.
A → a.Sb, A → a.b, S → .SA, S → .A, A → .aSb, A → .ab
A → aS .b, S → S .A, A → .aSb, A → .ab
A → ab .
I : A → aSb .
I0 : q0 ,
.
A
I6
S
b
I3
I4
c
A
a
I2
A
a
I1
S 0 → Sc,
S → SA,
0
4
0
5
8
4/6
Recognizing Viable Prefixes
DFA Recognizing Viable Prefixes
DFA For Viable Prefixes
S → A.
S
I0
I1
A
a
I3
a
S
b
I5 S → SA.
A
I2
A
a
I4 S 0 → Sc.
c
A
I6
a
I7
A → ab.
b
I8
A → aSb.
stack
0
0a3
0a3a3
0a3a3b7
0a3A2
0a3S6
0a3S6a3
0a3S6a3b7
0a3S6A5
0a3S6
0a3S6b8
0A2
0S1
0S1c4
0S0
–
rest of input
aababbc
ababbc
babbc
abbc
abbc
abbc
bbc
bc
bc
bc
c
c
c
–
–
–
action
shift
shift
shift
reduce A → ab
reduce S → A
shift
shift
reduce A → ab
reduce S → SA
shift
reduce A → aSb
reduce S → A
shift
reduce S 0 → Sc
||
Accept
5/6
Recognizing Viable Prefixes
The End
The End
6/6