קומפילציה – 2 תרגיל בית אסתי - הפיתרון של ניר ומנשה עם תיקונים קלים 1 שא

‫תרגיל בית ‪ – 2‬קומפילציה‬
‫הפיתרון של ניר ומנשה עם תיקונים קלים‬
‫‪ -‬אסתי‬
‫שאלה ‪1‬‬
‫א‪ .‬נבנה את הטבלה‪:‬‬
‫‪follow‬‬
‫‪$‬‬
‫‪first‬‬
‫‪w‬‬
‫ב‪ .‬הביטוי אינו )‪ .LL(1‬ננסה להפוך אותו ל )‪ LL(1‬ע"י ביטול הרקורסיה השמאלית ו ‪:left factoring -‬‬
‫‪:Left factoring‬‬
‫‪‬‬
‫במקום הכללים‬
‫‪‬‬
‫במקום הכללים‬
‫ו‬
‫ו‬
‫ביטול רקורסיה שמאלית‪:‬‬
‫נכתוב‪:‬‬
‫במקום‬
‫‪‬‬
‫נכתוב את הדקדוק החדש‪:‬‬
‫נכתוב‪:‬‬
‫נכתוב‪:‬‬
‫נבדוק אם הדקדוק החדש הינו )‪:LL(1‬‬
‫נבנה את טבלת ‪ first‬ו ‪:follow‬‬
‫‪follow‬‬
‫‪$‬‬
‫‪$‬‬
‫‪First‬‬
‫'‬
‫‪,‬‬
‫‪W‬‬
‫ניתן לראות שגם לאחר ביטול הרקורסיה השמאלית וביצוע ‪ left factoring‬עדיין יש קונפליקטים (מסומנים בצהוב)‪,‬‬
‫לכן הדקדוק עדיין לא )‪ LL(1‬וגם אי אפשר להפוך אותו לכזה‪.‬‬
‫שאלה ‪2‬‬
‫א‪ .‬לא נכון‪ .‬דוגמא‪:‬‬
‫‪follow‬‬
‫‪First‬‬
‫‪$‬‬
‫‪a,b‬‬
‫‪$‬‬
‫‪$‬‬
‫‪A‬‬
‫‪a,ε‬‬
‫‪a,b‬‬
‫‪a‬‬
‫‪b‬‬
‫למשל‪ :‬ניתן לגזור את ‪ ab‬בשתי צורות‪:‬‬
‫‬‫‬‫ב‪ .‬לא נכון‪ ,‬דוגמא‪:‬‬
‫‪Follow‬‬
‫‪$‬‬
‫‪$‬‬
‫‪$‬‬
‫‪First‬‬
‫‪a‬‬
‫‪a‬‬
‫‪a‬‬
‫‪$‬‬
‫‪a‬‬
‫למשל‪ :‬ניתן לגזור את ‪ ab‬בשתי צורות‪:‬‬
‫‬‫‬‫ג‪.‬‬
‫שני הדקדוקים מייצגים את השפה‬
‫הדקדוק הראשון אינו )‪ ,LL(2‬והשני כן‪.‬‬
‫‪.‬‬
‫שאלה ‪3‬‬
‫א‪ .‬נבדוק אם הדקדוק )‪:LR(0‬‬
‫‪On G goto S2‬‬
‫‪On H goto S3‬‬
‫‪On F goto S4‬‬
‫‪On F goto S4‬‬
‫‪On a shift S5‬‬
‫‪S1‬‬
On b shift S6
On a shift S5
On b shift S6
On G goto S7
On a shift S5
On H goto S8
On b shift S6
On a shift S9
On b shift S10
Accept
Reduce 1, G
Accept
Reduce 1, H
On b shift S11
On a shift S12
Accept
Accept
Accept
Accept
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
a
S5
S5
b
S6
S9
Acc
R1,G
Acc
R1,H
S12
Acc
Acc
Acc
Acc
S6
S10
Acc
R1,G
Acc
R1,H
S11
Acc
Acc
Acc
Acc
$
G
2
7
H
3
F
4
8
Acc
R1,G
Acc
R1,H
Acc
Acc
Acc
Acc
.S6 -‫ ו‬S5 -‫ עבור על הטרמינלים ב‬reduce-reduce conflict ‫ קיים‬:LR(0) ‫הדקדוק אינו‬
:SLR(1) ‫נדבוק עבור‬
F
G
H
First
a,b
a
b
a
Follow
a,b
a,b
b,a
b
$
G
H
F
-
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S5
S5
S9
Acc
R1,G
Acc
R1,H
S12
Acc
Acc
Acc
Acc
S6
S6
S10
Acc
R1,G
Acc
R1,H
S11
Acc
Acc
Acc
Acc
2
7
3
4
8
Acc
Acc
Acc
Acc
Acc
Acc
SLR(1) ‫עדיין קיימים קונפליקטים – הדקדוק אינו‬
.‫ב‬
LR(1) ‫נבדוק עבור‬
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
S11
S12
S13
S14
$,a,b
$,a,b
$,a,b
$,a,b
$,a,b
$,a,b
a
b
$,a,b
b
$,a,b
a
$,a,b
$,a,b
$,a,b
a
$,a,b
b
$,a,b
b
$,a,b
a
$,a,b
$,a,b
$,a,b
$,a,b
On G goto S2
On H goto S3
On F goto S4
On F goto S4
On a shift S5
On b shift S6
On a shift S5
On b shift S6
On G goto S7
On a shift S8
On H goto s9
On b shift s10
On a shift s11
On b shift s12
On $,a,b reduce
On a reduce
On $,a,b reduce
On b reduce
On b shift s13
On b reduce
On a shift s14
On a reduce
On $,a,b reduce
On $,a,b reduce
On $,a,b reduce
On $,a,b reduce
.‫ד‬+‫ג‬
:‫טבלת גזירה‬
S6
a
S5
S8
S10
S11
R1,F
R1,G
R1,F
S7
S8
S9
S10
S11
S12
S13
S14
S14
R1,H
R2,F
R2,F
R3,F
R3,F
S1
S2
S3
S4
S5
B
S6
$
F
4
G
2
7
H
3
9
S12
R1,F
R1,F
R1,F
R1,H
S13
R1,G
R1,F
R2,F
R2,F
R3,F
R3,F
R2,F
R2,F
R3,F
R3,F
.S6 -‫ ב‬b ‫ עבור הטרמינל‬reduce-reduce conflict ‫למשל קיים‬:LR(1) ‫הדקדוק אינו‬
-
4 ‫שאלה‬
LR(1) ‫ דוגמא לדקדוק שאינו‬.‫א‬
S1
S2
S3
$
$
b
b
On A goto S2
On B goto S2
On a shift S3
On a shift S3
b
b
On b reduce
On b reduce
……..
.LR(1) ‫ הדקדוק אינו‬,reduce-reduce conflict ‫ יש‬S3-‫ב‬
:SLR ‫ אבל כן‬LL(1) ‫ דוגמא לדקדוק שאינו‬.‫ב‬
,‫ כי יש בו ריקורסיה שמאלית‬LL(1) ‫הדקדוק בהכרח אינו‬
:SLR ‫נראה שהוא כן‬
S1
On S goto S2
On a shift S3
-
S2
S3
Accept
Accept
S1
S2
S3
a
S3
acc
acc
$
S
2
Acc
acc
.SLR ‫ הדקדוק הוא‬,‫אין קונפליקטים‬
LL(1) ‫ וכן‬SLR ‫דקדוק שהוא לא‬
:LL(1) ‫נראה שהדקדוק הינו‬
S
A
B
a
first
a,b
Follow
$
a,b
a,b
B
S
A
B
.LL(1) ‫ לכן הדקדוק הוא‬,‫אין קונפליקטים‬
:SLR ‫כעת נראה שהדקדוק אינו‬
S1
S2
S3
S4
S5
S6
S7
On A goto S2
Reduce 0, A
On A goto S3
Reduce 0, B
On a shift s4
On b shift s5
On A goto S6
Reduce 0, A
On B goto s7
Reduce 0, B
On b shift s8
On a shift s9
.‫ג‬
S8
S9
Accept
Accept
a
R0,A
R0,B
S4
1
2
3
4
5
6
7
8
9
B
R0,B
R0,A
$
S
S5
R0,A
R0,B
S8
R0,A
R0,B
A
2
B
3
6
7
S9
Accept Accept
Accept Accept
.SLR ‫ לכן הדקדוק אינו‬,S1 ‫ ב‬reduce – reduce ‫יש קונפליקט‬
LR(1) ‫ וכן‬SLR ‫ דקדוק שהוא לא‬.‫ד‬
:SLR ‫נראה שהדקוק אינו‬
S
A
B
first
a,b
a
a
-
Follow
$
c,b
c
-
S1
S2
S3
S4
S5
S6
S7
S8
S9
On A goto S2
On B goto S3
On a shift s4
On a shift s4
On b shift s5
On b shift s6
On c shift s7
R1,A
R1,B
On A goto s8
On a shift s4
On a shift s4
Accept
Accept
On c shift s9
Accept
1
2
3
4
5
6
7
8
9
a
S4
b
S5
S6
c
$
S
S7
R1,A R1,A
r1,B
S4 S4
A
2
B
3
8
Acc
Acc
S9
Acc
SLR ‫יש קונפליקטים – הדקדוק אינו‬
LR(1) ‫נראה שהדקדוק הינו‬
S1
S2
S3
S4
S5
S6
S7
S8
S9
S10
$
$
b
c
$
$
$
b
c
$
c
$
$
c
$
$
On A goto s2
On B goto s3
On a shift s4
On a shift s4
On b shift s5
On b shift s6
On c shift s7
On b reduce
On c reduce
On A goto s8
On a shift s9
On $ reduce
On $ reduce
On c reduce
On c shift s10
On $ reduce
a
b
c
$
1 S4 S5
2
S6
3
S7
4
R1,A r1,B
5 S9
6
R2,S
7
R2,S
8
S10
9
R1,A
10
R3,S
S
A
2
B
3
8
LR(1) ‫אין קונפליקטים – הדקדוק‬
-
SLR ‫ וכן‬LR(0) ‫ דוגמא לדקדוק שאינו‬.‫ה‬
:LR(0) ‫נראה שהדקדוק אינו‬
S1
On A goto s2
On B goto s3
On a shift s4
On a shift s4
On B goto s5
On a shift s4
Accept
Reduce 1, A
Reduce 1, B
Accept
S2
S3
S4
S5
S1
S2
S3
S4
S5
-
a
S4
S4
acc
R1,A
R1,B
acc
$
S
A
2
B
3
5
Acc
R1,A
R1,B
Acc
LR(0) ‫יש קונפליקטים – הדקדוק לא‬
:SLR ‫נראה שהוא כן‬
S
A
B
S1
S2
S3
S4
S5
a
S4
S4
acc
R1,A
acc
first
a
a
a
$
-
Follow
$
A
$
S
A
2
B
3
5
Acc
R1,B
Acc
SLR ‫אין קונפליקטים – הדקדוק כן‬
LALR ‫ שאינו‬LR(1) ‫דוגמא לדקדוק‬
.‫ו‬
S1
$
$
$
a
a
$
$
a
a
a
a
$
a
a
S2
S3
S4
S5
S6
S7
S8
S9
S1
S2
S3
S4
S5
S6
S7
S8
S9
a
S2
S6
On a shift s2
On b shift s3
On A goto s4
On b shift s5
On a shift s6
On $ reduce
On a goto s7
On a reduce
On A goto s8
On b shift s5
On a shift s6
On $ reduce
On a shift s9
On a reduce
b
S3
S5
$
A
4
R1,A
7
R1,A
S6
S5
8
R3,A
S9
R3,A
.LR(1) ‫אין קונפליקטים – הדקדוק הוא‬
‫ לכן האוטומט ניתן‬,‫ שלהם‬look ahead-‫ זהים פרט ל‬5/3 ,9/7 ‫ ניתן לראות כי זוגות המצבים‬,‫אולם‬
.LALR ‫לצמצום והדקדוק אינו‬
.‫ לא יתכן‬LALR ‫ וכן‬LR(1) ‫ דקדוק שהוא לא‬.‫ז‬
‫ בהכרח גם דקדוק‬LALR ‫ לכן כל דקדוק‬,LR(1) ‫ נוצר ע"י צמצום מצבים זהים באוטומט שתואם‬LALR ‫יצירת‬
.LR(1)