Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СПО [укр. язык].DOC
Скачиваний:
46
Добавлен:
02.05.2014
Размер:
526.85 Кб
Скачать

Розбір з використанням граматики Ван Вейнгаарда та лінійно-обмеженого автомату.

Умови можливості розбору:

Поняття узагальнюючої довжини:

  • Присутня тільки сувора граматика, без метаграматики;

  • За узагальнюючу довжину терміналу суворої граматики приймають постійне число

  • Узагальнююча довжина форми рівна кількості терміналів метаграматики в цій формі та позначається

  • узагальнююча довжина лівої частини схеми виводу дорівнює довжині форми в лівій частині та позначається

  • узагальнююча довжина правої частини схеми виводу дорівнює сумі узагальнюючих довжин форми, терміналів та ком в правій частині, позначається:

Означення. Граматика Ван Вейнгаарда є не скорочуваною граматикою якщо:

  • існує таке K, при якому для всіх схем суворої граматики та виконується нерівність Ll<=Lr;

  • всі нетермінальні символи метаграмтики, які входять в ліву частину , входять і в праву частину;

  • кількість входжень в лівій частині повинно бути < або = кількості входжень в правій частині.

Лінінйно-обмежений автомат – це деяка різновидність машини Т’юрінга. Він відрізняється від машини Тюрінга:

  • стрічка обмежена;

  • в діях;

Лінійно-обмежений автомат може виконувати три дії за один крок:

  1. Змінювати стан;

  2. Змінювати теперішній елемент;

  3. Зсув вправо, зсув вліво, або на місці.

Вивід виконується знизу вверх по дереву розбору. Для будь-якої звичайної граматики можна побудувати еквівалентну граматику Ван Вейнгаарда, але для будь-якої граматики Ван Вейнгаарда не можливо побудувати еквівалентну їй звичайну.

Лекція №8. Тема 5 : Генерація коду. Метод включення дій в граматику.

Генерація коду здійснюється за два проходи та використовується за звичай деяка проміжна мова. Це зумовлено :

  • Бажанням розділити машинно-залежну та машинно-незалежну частини коду;

  • Оптимізацією коду.

Проміжний код повинен бути:

  • Машинно-незалежний;

  • З явною адресацією.

За проміжну мову приймають:

  1. Ассемблер;

  2. Префіксну та постфіксну форми запису;

  3. Четвірки (наприклад, a+b=1;

c-d=2;

1*2=3;

-3=4, в кожній четвірці маємо: два операнди, знак операції та операнд результату – за звичай номер четвірки). Переваги четвірок:

  • Неявна адресація;

  • Кожна четвірка відповідає команді;

  • Добре працює з тимчасовими змінними;

  • Простіша оптимізація ніж в інших випадках;

  1. Трійки (наприклад, a+b;

c-d;

1*2;

-3, в кожній четвірці маємо: два операнда та знак операції, номер трійки - порядковий номер);

  1. Не пряма трійка, маємо деякі посилання на трійки:

Метод включення дій в граматику.

Розглянемо приклад :

Побудуємо змінену граматику з включеними діями:

Включені дії:

A1: теперішній елемент заносимо в стек;

A2:

  • Два елементи виймаємо із стеку та формуємо неповну четвірку ЕЛ1, ЕЛ2=Nчетвірки;

  • N четвірки заносимо в стек;

A3:

  • Три елементи виймаємо із стеку;

  • Будуємо четвірку ЕЛ1, ЕЛ2, ЕЛ3=Nчетвірки;

  • N четвірки заносимо в стек;

A4: один елемент виймаємо з стеку.

Приклад : розглянемо стрічку “-(-a+b)*(c+d)”

№правила

№включених дій

Отриманий ланцюг

Четвірка

Стек

0

_

S <A4>

_

-

1,5

_

-<A1>T<A2>Z<A4>

_

-

2

A1

-(S)<A2>Z<A4>

_

-,-

1,5

A1

-(-<A1>T<A2>Z)<A2>Z<A4>

_

-,-

3,6

_

-(-a<A1><A2>+<A1>S<A3>)<A2>Z<A4>

_

-,-

1,3,7

A1,A2,A2

-(-a+b<A1><A3>)<A2>Z<A4>

-a=1

1,-

6

A1,A2,A3

-(-a+b)*<A1>S<A3><A4>

1+b=2

-2=3

3

1,2,7

A1

-(-a+b)*(S)<A3><A4>

_

*,3

1,3,6

_

-(-a+b)*(c<A1>+<A1>S<A3>)<A3><A4>

_

*,3

1,3,7

A1,A1

-(-a+b)*(c+d<A1><A3>)<A3><A4>

_

+,c,*,3

_

A1,A3

-(-a+b)*(c+d)<A3><A4>

c+d=4

4,*,3

_

A3,A4

-(-a+b)*(c+d)

3*4=5

_

В результаті розбору отримали четвірки:

-a=1;

1+b=2;

-2=3;

c+d=4;

3*4=5.

Аналогічно можна перевірити контекстні умови (один мінус, пріоритет *,/).

Соседние файлы в предмете Системное программное обеспечение