Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
модуль.docx
Скачиваний:
350
Добавлен:
05.03.2016
Размер:
2.15 Mб
Скачать

1.2.3. Побудова трансляторів

Метою побудови трансляторів є практична побудова програми, яка перекладає вхідний текст (наприклад, програму, яка написана мовою програмування високого рівня) в машинну мову. При цьому досягнення цієї практичної мети ґрунтується на складному теоретичному фундаменті: теорії формальних мов та теорії автоматів, основними поняттями яких є алфавіт, ланцюжок, мова та граматика.

Алфавітом називають скінченну множину неподільних символів. Скінченні послідовності символів алфавіту називають ланцюжками, побудованими у цьому алфавіті. Мова – це множина ланцюжків скінченної довжини у заданому скінченному алфавіті.

При описуванні мов виникає одне важливе питання: як описати мову у тому випадку, коли вона нескінченна. Якщо довжини всіх ланцюжків обмежені, то складається зі скінченного числа ланцюжків та можна скласти список усіх ланцюжків з . Однак для багатьох мов не можна або небажано встановити верхню границю припустимої дов­жини ланцюжка мови. Такі мови не можна визначити переліком усіх ланцюжків. Необхідний опис мови повинен бути скінченним, у той час, як мова може бути нескінченною. Відомо кілька таких способів описування мов. Один із них полягає у використанні системи, що називається граматикою. Залежно від способу визначення мови граматики поділяють на ті, що розпізнають, та на ті, що породжують.

Граматика, що розпізнає, – це граматика, яка для будь-якого рядка може визначити, є цей ланцюжок правиль­ним або ні. Граматика, що породжує – це граматика, яка може побудувати будь-який правильний ланцюжок та не будує неправильних ланцюжків.

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

Граматики можна класифікувати за виглядом їх продукцій. Така класифікація називається ієрархією Хомського. Граматики поділяють на:

  1. Тип 0 – необмежені граматики (загального вигляду, з фразовою струк­турою). Практичного застосування в міру своєї складності такі граматики не мають.

  2. Тип 1 контекстно-залежні граматики. До цього типу відносяться контекстно-залежні (КЗ) та неукорочуючі граматики. Ці класи граматик можуть використовуватися при аналізі текстів на природних мовах, але при побудові компіляторів практично не використовуються в міру своєї складності.

  3. Тип 2 – контекстно-вільні (кв) граматики. Кв-граматики широко використовуються для описування синтаксису комп’ютерних мов.

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

Кожному класу граматик відповідає клас мов. Мові приписується тип граматики, якою вона породжується. Для кожного класу граматик з ієрархії Хомського існує клас автоматів-розпізнавачів, що визначає той же клас мов. Цими розпізнавачами є скінченні автомати, автомати з магазинною пам’яттю, лінійно обмежені автомати та машини Тьюринга (див. рисунок 1.1). Точніше мови з ієрархії Хомського можна охарактеризувати так:

1. Мова регулярна (праволінійна або ліволінійна) тоді й тіль­ки тоді, коли вона визначається скінченним автоматом.

2. Мова контекстно-вільна тоді й тільки тоді, коли вона ви­значається автоматом з магазинною пам’яттю.

3. Мова контекстно-залежна тоді й тільки тоді, коли вона ви­значається лінійно обмеженим автоматом.

4. Мова визначається граматикою загального виду тоді й тіль­ки тоді, коли вона визначається машиною Тьюринга.

У традиційних областях застосування трансляторів прийнята своя термінологія. Основною такою областю є трансляція мов програмування високого рівня в еквівалентну програму іншою мовою. У цьому випадку початкова мова називається вхідною, а вхідна програма цією мовою називається вхідним кодом. Машинна мова, якою здійснюється трансляція, називається об’єктною мовою, результат трансляції називається об’єктним кодом. Комп’ютер, на якому відтрансльована програма буде запущена, називається цільовою машиною, він не обов’язково співпадає з типом машини, на якій працює транслятор.

При трансляції мов програмування від трансляторів може вимагатися виконання різних завдань. Якщо завданням є трансляція мовою низького рівня, наприклад, машинною мовою або мовою асемблера, то такий транслятор називається компілятором. Інше можливе завдання при трансляції програми алгоритмічною мовою – безпосереднє виконання транслятором вихідного коду. У цьому випадку транслятор називається інтерпретатором. У деяких випадках постає завдання трансляції, при якій виходом є програма мовою високого рівня, а входом – програма, що написана на деякому розширенні цієї мови. Такі транслятори називаються препроцесорами.

Рисунок 1.1. Ієрархія граматик, мов та автоматів

У загальному випадку, завдання побудови трансляторів можуть бути дуже різноманітними. Вхідною мовою в трансляторі може бути не тільки мова програмування. Наприклад, транслятор може за словесним описом ситуації, що виражена на обмеженій підмножині природної мови, будувати анімаційну картинку цієї ситуації або формулювати обмірковану відповідь на вхідне питання з урахуванням стану діалогу. Такі програми-транслятори використовуються, наприклад, у штучному інтелекті.