Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Приклад 1. 1. Побудувати спадний розпізнавач для оператору присвоювання арифметичного виразу



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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...