Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spz / шпори.doc
Скачиваний:
99
Добавлен:
23.02.2016
Размер:
1.56 Mб
Скачать

Граф кінцевого детермінованого автомата, що розпізнає граматику цілих чисел мови Сі(Немає) не 4.2.Синтаксичний та семантичний аналіз. Синтаксично-керований переклад.

Синтаксичний аналіз - це процес, в якому досліджується ланцюжок лексем і встановлюється, чи задовольняє вона структурним умов, явно сформульованим у визначенні синтаксису мови. Це - найскладніша частина компілятора. Синтаксичний аналізатор розчленовує вихідну програму на складові частини, формує її внутрішнє представлення, заносить інформацію в таблицю символів та інші таблиці. При цьому проводиться повний синтаксичний і, по можливості, семантичний контроль програми. Фактично, це - синтаксично керована програма. При цьому зазвичай прагнуть відокремити синтаксис від семантики наскільки це можливо - коли синтаксичний аналізатор розпізнає конструкцію вихідного мови, він викликає семантичну процедуру, яка контролює цю конструкцію, заносить інформацію куди треба, перевіряє на дублювання опису змінних, перевіряє відповідність типів і т.п.

Основні принципи роботи синтаксичних аналізаторів.

Синтаксичний аналізатор (синтаксичний розбір) - це частина компілятора, яка відповідає за виявлення основних синтаксичних конструкцій вхідної мови. У завдання синтаксичного аналізу входить: знайти і виділити основні синтаксичні конструкції в тексті вхідної програми, встановити тип і перевірити правильність кожної синтаксичної конструкції і, нарешті, представити синтаксичні конструкції у вигляді, зручному для подальшої генерації тексту результуючої програми. В основі синтаксичного аналізатора лежить распознаватель тексту вхідної програми на основі граматики вхідної мови. Як правило, синтаксичні конструкції мов програмування можуть бути описані за допомогою КС-граматик, рідше зустрічаються мови, які, можуть бути описані за допомогою регулярних граматик. Найчастіше регулярні граматики застосовні до мов асемблера, а мови високого рівня побудовані па основі синтаксису КС-мов. Розпізнавач дає відповідь на питання про те, належить чи ні ланцюжок вхідних символів заданому мови. Однак, як і у випадку лексичного аналізу, завдання синтаксичного розбору не обмежишся лише перевіркою приналежності ланцюжка заданому мови. Необхідно виконати всі перераховані вище завдання, які повинен вирішити синтаксичний аналізатор. У такому варіанті аналізатор вже не є різновидом МП-автомата - його функції можна трактувати ширше. Синтаксичний аналізатор повинен мати якийсь вихідний мову, за допомогою якого він передає наступним фазам компіляції не тільки інформацію про знайдені і розібраних синтаксичних структурах. У такому випадку він вже є перетворювачем з магазинною пам'яттю - МП-перетворювачем. Синтаксичний розбір - це основна частина компілятора на етапі аналізу. Без виконання синтаксичного розбору робота компілятора безглузда, у той час як лексичний розбір в принципі є необов'язковою фазою. Усі завдання з перевірки синтаксису вхідного мови можуть бути вирішені на етапі синтаксичного розбору. Сканер тільки дозволяє позбавити складний за структурою синтаксичний аналізатор від рішення примітивних завдань з виявлення та запам'ятовування лексем вихідної програми.

Виходом лексичного аналізатора є таблиця лексем (або ланцюжок лексем). Ця таблиця утворює вхід синтаксичного аналізатора, який досліджує тільки один компонент кожної лексеми - її тип. Решта інформації про лексемах використовується на більш пізніх фазах компіляції при семантичному аналізі, підготовці до генерації і генерації коду результуючої програми. Синтаксичний аналіз (плі розбір) - це процес, в якому досліджується таблиця лексем і встановлюється, чи задовольняє вона структурним умов, явно сформульованим і визначенні синтаксису мови.

Синтаксичний аналізатор сприймає вихід лексичного аналізатора і розбирає його відповідно до граматикою вхідної мови. Однак у граматиці вхідної мови програмування звичайно не уточнюється, які конструкції слід вважати лексемами. Прикладами конструкцій, які зазвичай розпізнаються під час лексичного аналізу, служать ключові слова, константи і ідентифікатори. Але ці ж конструкції можуть розпізнаватися і синтаксичним аналізатором. На практиці не існує жорсткого правила, що визначає, які конструкції повинні розпізнаватися на лексичному рівні, а які треба залишати синтаксичному аналізатору. Зазвичай це визначає розробник компілятора виходячи з технологічних аспектів програмування, а також синтаксису та семантики вхідної мови Далі розглянуті технічні аспекти, пов'язані з реалізацією синтаксичних аналізаторів для використання результатів їхньої роботи на етан генерації коду. Тим не менш, основу будь-якого синтаксичного аналізатора завжди складає распознаватель, побудований на основі якого-небудь класу КС-граматик. Тому головну роль і те, як функціонує синтаксичний аналізатор і який алгоритм лежить в його основі, відіграють принципи побудови розпізнавачів КС-мов. Без застосування цих принципів неможливо виконати ефективний синтаксичний розбір пропозицій вхідного мови.

Соседние файлы в папке spz