محلل بسيط من اليسار إلى اليمين
يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. (يناير 2022) |
مجزئ يسار يمين البسيط عادة يحتوي على حالات تعارض أكثر من مجزئ يسار يمين الأمامي. في لغات حاسوب العالم الحقيقي، لا يكفي استخدام مجزئ SLR، لكنها تعتبر آداة جيدة في مشاريع الطلاب الحاسوبية. قواعد الـ SLR هي القواعد التي لا تحتوي على تقارير تعارض مع أي مولد مجزئ SLR.
الخوارزمية
خوارزمية تجزئ SLR
Initialize the stack with S Read input symbol while (true) if Action(top(stack), input) = S NS <- Goto(top(stack),input) push NS Read next symbol else if Action(top(stack), input) = Rk output k pop |RHS| of production k from stack NS <- Goto(top(stack), LHS_k) push NS else if Action(top(stack),input) = A output valid, return else output invalid, return
مثال
قاعدة يمكن تحليلها باستخدام مجزئ SLR وبدون استخدام مجزئ LR(0) كما يلي:
- (0) S → E
- (1) E → 1 E
- (2) E → 1
عند بناء الـaction وgoto كما تم في جدول مجزئ LR(0) ينتج لنا المجموعات والجداول التالية:
- Item set 0
- S → • E
- + E → • 1 E
- + E → • 1
- Item set 1
- E → 1 • E
- E → 1 •
- + E → • 1 E
- + E → • 1
- Item set 2
- S → E •
- Item set 3
- E → 1 E •
جداول الـaction وgoto :
action | goto | ||
state | 1 | $ | E |
0 | s1 | 2 | |
1 | s1/r2 | r2 | 3 |
2 | acc | ||
3 | r1 | r1 |
كما هو ملاحظ يوجد تعارض تحويل في state 1 و terminal '1'. لكن.المجموعة التلية من E هي { $ } فتقلل الإجراءات r1 وr2 وتكون صالحة فقط في العامود $. والنتيجة هي أقل تعارض لجدول الـ goto:
action | goto | ||
state | 1 | $ | E |
0 | s1 | 2 | |
1 | s1 | r2 | 3 |
2 | acc | ||
3 | r1 |