Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TP_Book_Nizhyn.doc
Скачиваний:
94
Добавлен:
03.12.2018
Размер:
3.4 Mб
Скачать
    1. 4.7 Методи подання синтаксису мов програмування

Граматики типу 2 (контекстно-вільні граматики) відіграють велику роль у формалізації мов програмування. Справа в тому, що вони задають чітке подання деякого синтаксичного поняття як структури, що склається з певних частин. Ті частини, у свою чергу, мають частини і так далі. Тобто конктекстно-вільні граматики подають ієрархічну організацію синтаксичного поняття. Це відповідає і композиційній структурі програм. Саме тому вивченню цього класу граматик буде приділено більшу увагу. Щоб продемонструвати зв’язок з мовами програмування більш чітко, розглянемо методи подання синтаксису мов програмування. Найбільш відомим методом є нормальні форми Бекуса–Наура (БНФ). Цей формалізм (метамова) широко використовується як при поданні синтаксису мов програмування, так і при вивченні природних мов.

4.7.1 Нормальні форми Бекуса–Наура

Ці форми були запропоновані Дж. Бекусом та П. Науром для опису синтаксису мови програмування АЛГОЛ-60. Основним призначенням форм Бекуса та Наура було подання у компактному вигляді строго формальних правил написання основних конструкцій мов програмування.

Приблизно в той самий час Ноам Хомський (1959) ввів аналогічну форму – контексно-вільну граматику – для визначення синтаксису природної мови.

БНФ складається зі скінченої множини правил, що в сукупності і визначають формальну мову (зокрема, синтаксис мов програмування).

Одним із класів об’єктів, що використовуються в БНФ, є символи описуваної мови. Другим класом об’єктів БНФ виступають конструкції описуваної мови, значеннями яких є ланцюжки основних символів. Такі конструкції задаються метазмінними, що для кращої мнемоніки записуються як певні ланцюжкі у кутових дужках. Викликано це тим, що для опису синтаксису мов програмування використовують велику кількість нетермінальних символів, тому для наочності їх подають як комбінації слів природної мови, що поміщені в кутові дужки. Ліву частину правил відділяють від правої частини знаком ::=, крім того, правила з однаковою лівою частину записуються як одне правило, при цьому праві частини (альтернативи) розділяються вертикальною рискою |.

Приклад 4.16 Синтаксис операторів мови SIPL задається наступною БНФ:

<оператор> ::=

<змінна>:=<вираз> |

<оператор> ; <оператор>|

if <умова> then <оператор> else <оператор> |

while <умова> do <оператор> |

begin <оператор> end |

skip

За кожною БНФ легко побудувати конктекстно-вільну граматику, співставляючи правилу БНФ виду A::=1 | 2 | … n сукупність правил граматики A1, A2, … An.

4.7.2 Модифіковані нормальні форми Бекуса–Наура

Для отримання більш наочних та компактних описів синтаксису застосовують модифіковані БНФ. Найчастіше передбачається введення спеціальних позначень для ітерації та альтернативи.

Наприклад, список якихось елементів задається БНФ

<список>::=<елемент><список>|

В модифікованій БНФ можна записати

<список>::={<елемент>}*

Така форма передбачає введення операції, яка називається ітерацією і позначається парою фігурних дужок із зірочкою.

Якщо певна частина синтаксичної конструкції може бути пропущена, то в модифікованих БНФ її видяляють квадратними дужками. Наприклад, замість правила БНФ

<оператор> ::=

if <умова> then <оператор> else <оператор> | if <умова> then <оператор>

можна вжити наступне правило модифікованої БНФ:

<оператор> ::= if <умова> then <оператор> [ else <оператор>].

Зрозуміло, що для модифікованих БНФ вживати дужки “ { “, “ } ”, “ [ “ та “ ] ”, а також “ * ” у якості символів мови не слід, тому що вони виступають як метасимволи формалізму модифікованих БНФ. При необхідності вживання цих дужок і зірочки для них використовують спеціальні позначення.