- •Лабораторна робота № 2 Проектування лексичного аналізу
- •Граматики передування
- •Алгоритм «зсув-згортка» для граматик операторного передування
- •Вимоги до виконання роботи Порядок виконання роботи
- •Вимоги до оформлення звіту Звіт повинен містити наступні розділи:
- •Основні контрольні питання
- •Варіанти завдань Варіанти початкових граматик
- •Початкові граматики і типи допустимих лексем
- •Приклад виконання роботи Завдання для прикладу
- •Побудова матриці операторного передування Побудова множини крайніх правих і крайніх лівих символів
- •Побудова множини крайніх правих і крайніх лівих термінальних символів
- •Заповнення матриці передування
- •Приклади виконання розбору пропозицій вхідної мови
- •Реалізація синтаксичного розпізнавача. Розбиття на модулі
- •Модуль опису матриці передування і правил граматики
- •Модуль структур даних для синтаксичного аналізу і реалізації алгоритму «зсув -згортка»
- •Текст програми розпізнавача
- •Висновки по виконаній роботі
- •Синтаксично керований переклад
- •Способи внутрішнього представлення програм
- •Багатоадресний код з неявно іменованим результатом (тріади)
- •Схеми су-перекладу
- •Загальні принципи оптимізації коду
- •Принципи оптимізації лінійних ділянок
- •Згортка об'єктного коду
- •Виключення зайвих операцій
- •Загальний алгоритм генерації й оптимізації об'єктного коду
- •Вимоги до виконання роботи Порядок виконання роботи
- •Приклад виконання роботи
- •Побудова схем су-перекладу
- •Реалізація генератора списку тріад Розбиття на модулі
- •Модуль опису допустимих типів тріад
- •Модуль опису структур даних для тріад
- •Модуль побудови списку тріад по дереву синтаксичного розбору
- •Модуль обчислення значень тріад на етапі компіляції
- •Модуль, що реалізує алгоритми оптимізації
- •Текст програми генератора списку тріад
- •Висновки по проробленій роботі
Основні контрольні питання
Яку роль виконує синтаксичний аналіз в процесі компіляції?
Які проблеми виникають при побудові синтаксичного аналізатора і як вони можуть бути вирішені?
Які типи граматик існують? Що таке КС- граматики? Розкажіть про їх використання в компіляторі.
Які типи розпізнавачів для КС- граматики існують? Розкажіть про недоліки та переваги різних типів розпізнавачів.
Поясніть правила побудови дерева виведення граматики.
Що таке граматика простого передування?
Як обчислюються відносини передування для граматик простого передування ?
Що таке граматика операторного передування ?
Як обчислюються відношення для граматик операторного передування ?
Розкажіть про завдання розбору. Що таке розпізнавач мови?
Розкажіть про загальні принципи роботи розпізнавача мови.
Що таке перенесення, згортка? Для чого необхідний алгоритм «перенесення-згортка»?
Розкажіть, як працює алгоритм «перенесення-згортка» в загальному випадку (з поверненнями).
Як працює алгоритм «перенесення -згортка» без повернень (поясніть на своєму прикладі)?
Варіанти завдань Варіанти початкових граматик
Далі приведені варіанти граматик. У всіх варіантах символ 5 є початковим символом граматики S,T,F i E означають нетермінальні символи.
Термінальні символи виділені жирним шрифтом. Замість символу а повинні підставлятися лексеми.
Початкові граматики і типи допустимих лексем
Нижче в табл. 3.1 приведені номери завдань. Для кожного завдання вказана відповідна йому граматика і типи допустимих лексем.
Таблиця 3.1. Номери завдань для виконання лабораторної роботи
Таблиця 3.1 продовження
ПРИМІТКА
Римськими числами вважати послідовності великих латинських букв X. V і I.
Шістнадцятковими числами вважати послідовність цифр і символів «а», «b» … «f», які починаються з цифри (наприклад 89, 45ас9, 0аСс4).
Для виконання роботи рекомендується використовувати лексичний аналізатор, побудований в ході виконання лабораторної роботи № 2
Приклад виконання роботи Завдання для прикладу
Для виконання лабораторної роботи візьмемо ту мову яку було використано для виконання лабораторної роботи № 2.
Ця
мова може бути задана, наприклад, за
допомогою наступної КС- граматики
з правилами Р:
Жирним шрифтом в граматиці і в правилах виділені термінальні символи. Як було вже сказано раніше, вибрана як приклад мова не співпадає ні з одним із запропонованих вище варіантів і, окрім цього, служить хорошою ілюстрацією основних особливостей побудови синтаксичною розпізнавача, властивих різним варіантам.
Побудова матриці операторного передування Побудова множини крайніх правих і крайніх лівих символів
Побудову множини крайніх лівих і крайніх правих символів виконаємо згідно описаному раніше алгоритму.
На першому кроці візьмемо всі крайні ліві і крайні праві символи з правил граматики G. Отримаємо множини, представлені в табл. 3.2.
Таблиця 3.2. Множина крайніх лівих і крайніх правих символів. Крок I
З
табл. 3.2 видно, що множина L(U)
для
символів S,E,D
а
також множина (U)
для символів F,
T,
E,
D
містить інші нетермінальні сим воли, а
тому повинні бути доповнені Наприклад
L(S)
повинне бути доповнене L(F), оскільки
символ F
входить
в
,
а R(F) повинне бути доповнене R(Е), оскільки
символ Е входить в
.
Виконаємо необхідні доповнення і одержимо множини, представлені в табл. 3.3.
Таблиця 3.3. Множина крайніх лівих і крайніх правих символів. Крок 2
Практично всі множини в табл. 3.3 змінилися в порівнянні з табл. 3.2 крім множин для символу С), а значить, побудова не закінчена. Продовжимо доповнювати множини. Одержимо множини, представлені в табл. 3.4.
В таблиці 3.4 в порівнянні з табл. 3.3 змінилися множини для символів F,T та E — побудова не закінчена. Продовжимо доповнювати множини. Одержимо множини, представлені в табл. 3.5.
Таблиця 3.4. Множини крайніх лівих і крайніх правих символів. Крок 3
Таблиця 3.5. Множини крайніх лівих і крайніх правих символів. Крок 4(результат)
В табл. 3.5 порівняно з таблицею3.4 і змінилися тільки множини R(U) для символів F і Т — побудова не закінчена. Продовжимо доповнювати множини. Але якщо виконати ще один крок (крок 5), то можна переконатися, що множини вже більше не зміняться (щоб не створювати ще одну зайву таблицю, цей крок тут виконувати не будемо). Таким чином, множини, представлені в табл. 3.5, є результатом побудови множини крайніх лівих і крайніх правих символів граматики G.
