Формальний опис вхідної мови програмування Одною з перших задач, що виникають при побудові компілятора, є визначення вхідної мови програмування. Для цього використовують різні способи формального опису, серед яких ми розглянемо розширену нотацію Бекуса-Наура (Backus/Naur Form - BNF). Деталізований опис вхідної мови два типи даних: цілий (int) та логічний (boolean); змінні довільної довжини; символи групування арифметичних операцій: “(”, “)”; логічні операції над цілими і логічними: (,&),(~),>=; оператор присвоєння: “:=” ; оператори блоку: “{”, “}”; оператори виводу (in) і виводу (out); оператор циклу ( repeat-until ). 1.2. Перелік термінальних символів та ключових слів Визначимо окремі термінальні символи та нерозривні набори термінальних символів (ключові слова): pochatok kinez. ; , = := # & ~ >= ( ) boolean true false int k1 k2 k3 repeat until in out
До термінальних символів віднесемо також усі цифри (0-9), латинські букви (a-z, A-Z) та символ пробілу (“ ”). Всього: 23 + 10 + 52 + 1 = 86 термінальних виразів. Це “цеглинки”, з яких має будуватися текст будь-якої вхідної програми. Формальний опис вхідної мови в термінах BNF Правила написання правил у розширеній нотації Бекуса-Наура: нетермінальні вирази записуються у кутових дужках: “<”, “>” ; термінальні вирази записуються жирним шрифтом або у подвійних лапках; усі нетермінальні вирази мають бути “розкриті” за допомогою термінальних; сивол “::=” відділяє праву частину правила від лівої; символ “|” розділяє альтернативи; сиволи “[”, “]” означають необов’язковість (вираз в дужках може бути відсутнім); сиволи “{”, “}” означають повторення.
Формальний опис заданої вхідної мови в термінах BNF: <program> ::= pochatok <block> kinez.