Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
1. Побудувати спадний розпізнавач для оператору присвоювання арифметичного виразу. Арифметичний вираз містить: ідентифікатори і,:=, (,),;. Кількість вкладених дужок не обмежена.
1. Будуємо правила граматики
1. I® i = A;
2. A® i C
3. A® (А) C
4. C® + A
5. C® $
2.Визначимо чи містить наша граматика невиробляючі символи:
відшукуємо правило в правій частині, якого розташовано термінал чи $. {C} – продуктивний симвіл. Відшукуємо правила, праві символи яких вже занесені в список чи лівий символ вже занесений у список. Якщо є, то додаємо в список нетерміналів:
{C}
{CA}
{CAI}
У список потрапили всі нетермінали, отже, непродуктивних символів немає.
3. Шукаємо недосяжні символи.
Заносимо в список початковий символ граматики {I}
Шукаємо правила, ліва частина якого вже занесена в список. Додаємо нетермінали правої частини:
{I}
{IA}
{IAC}
У список потрапили всі нетермінали, отже, недосяжних символів немає.
4. Дана граматика містить анулюючі правила та правила, права частина котрих починається з нетермінала, отже вона не може бути розділеною та слаборозділеною граматикою. Визначимо належність даної граматики до LL(1) - граматики.
Аналізуючи складені нами правила, дійдемо висновку, що ліворекурсивних правил немає.
Побудуємо функцію ВИБІР:
1. ВИБІР(I®і:=A;)={і}
2. ВИБІР(A®iC)={і}
3. ВИБІР(A®(А)C)={(}
4. ВИБІР(C®+A)={+}
5. ВИБІР(C®$)=СЛІД(А)={;,)}
Дана граматика є LL(1) – граматикою, так як множина ВИБІР для правил, що починаються з однакових терміналів не містить однакових символів.
5. Будуємо команди розпізнавача:
1) f(S, i, I)=(S, h0;A:=)
2) f(S, i, A)=(S, h0C)
3) f(S, (, A)=(S, h0C)А)
4) f(S, +, C)=(S, A)
5) f*(S,;, C)=(S, $)
6) f*(S,), C)=(S, $)
7) f(S,:=,:=)=(S, $)
8) f(S,),))=(S, $)
9) f(S,;,;)=(S, $)
10) f(S, $, h0)=(S, $)
6. Далі відповідно до побудованих правил розпізнаємо заданий ланцюжок:
(s, i:=i+(i+i);, h0I) – 1
(s,:=i+(i+i);, h0;A:=) – 7
(s, i+(i+i);, h0;A) - 2
(s, +(i+i);, h0;C) – 4
(s, (i+i);, h0;A) – 3
(s, i+i);, h0;C)A) – 2
(s, +i);, h0;C)С) - 4
(s, i);, h0;C)А) – 2
(s,);, h0;C)C) – 6
(s,);, h0;С)) – 8
(s,;, h0;C) -5
(s,;, h0;) -9
(s, $, h0) -10
(s,$,$)
Ланцюжк розпізнано.
Дата публикования: 2014-12-10; Прочитано: 138 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!