Синтаксичний аналіз в мовних процесорах

Для визначення синтаксичної компоненти мови програмування використовують контекстно-вільні граматики (КС-граматики). На відміну від скінчено-автоматних граматик потужність класу КС-граматик достатня, щоб визначити майже всі так звані синтаксичні властивості мов програмування. Якщо цього недостатньо, то розглядають деякі спрощення у граматиках типу 2 або параметричні КС-граматики.

Звичайно, із синтаксичною компонентою мови програмування пов'язана семантична компонента. Тоді, якщо ми говоримо про семантику мови програмування, ми вимагаємо семантичної однозначності для кожної вірно написаної програми. За аналогією з семантикою, при описі синтаксичної компоненти мови програмування необхідно користуватися однозначними граматиками.

Означення. Граматика G називається неоднозначною, якщо існує декілька варіантів виводу Синтаксичний аналіз в мовних процесорах - student2.ru в G ( Синтаксичний аналіз в мовних процесорах - student2.ru ).

Приклад. Розглянемо таку граматику Синтаксичний аналіз в мовних процесорах - student2.ru зі схемою Р.

Синтаксичний аналіз в мовних процесорах - student2.ru

Покажемо, що для ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru існує щонайменше два варіанти виводу:

1. Синтаксичний аналіз в мовних процесорах - student2.ru

2. Синтаксичний аналіз в мовних процесорах - student2.ru

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

Лівостороння стратегія виводу ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru в G — це послідовність кроків безпосереднього виводу, при якій на кожному кроку до уваги береться перший зліва направо нетермінал. Правостороння стратегія виводу Синтаксичний аналіз в мовних процесорах - student2.ru в G протилежна лівосторонній стратегії. З виводом Синтаксичний аналіз в мовних процесорах - student2.ru в G пов'язане синтаксичне дерево, яке визначає синтаксичну структуру програми.

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

Алгоритм. Побудова синтаксичного дерева ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru в граматиці G з урахуванням лівосторонньої стратегії виводу:

П1. Будуємо корінь дерева та позначимо його аксіомою S.

П2. В схемі P граматики G візьмемо правило виду Синтаксичний аналіз в мовних процесорах - student2.ru , де Синтаксичний аналіз в мовних процесорах - student2.ru . Та побудуємо дерево висоти 1 (Мал. 1).

Пі. На кроні дерева, побудованого на попередньому кроку, візьмемо перший зліва направо нетермінал. Нехай це буде Синтаксичний аналіз в мовних процесорах - student2.ru . Тоді в схемі P виберемо правило виду Синтаксичний аналіз в мовних процесорах - student2.ru , де Синтаксичний аналіз в мовних процесорах - student2.ru та побудуємо наступне дерево (Мал. 2).

S

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru

… …..

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Мал. 1.

Пункт Пі виконувати доти, доки на кроні дерева будуть елементи з Синтаксичний аналіз в мовних процесорах - student2.ru .

Відмітимо очевидні факти, що випливають з побудови синтаксичного дерева:

- крона дерева, зображеного на мал. 2 наступна Синтаксичний аналіз в мовних процесорах - student2.ru . Ланцюжок з крони Синтаксичний аналіз в мовних процесорах - student2.ru - це термінальний ланцюжок.

- для однозначної граматики G існує лише одне синтаксичне дерево виводу Синтаксичний аналіз в мовних процесорах - student2.ru в G.

S

Синтаксичний аналіз в мовних процесорах - student2.ru

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru … …..

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru

……….

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru

Мал. 2.

Означення. Будемо говорити, що ланцюжок Синтаксичний аналіз в мовних процесорах - student2.ru , побудований на основі граматики Синтаксичний аналіз в мовних процесорах - student2.ru проаналізований, якщо відоме одне з його дерев виводу. Зафіксуємо послідовність номерів правил, які були використані під час побудови синтаксичного дерева виводу Синтаксичний аналіз в мовних процесорах - student2.ru в G з урахуванням стратегії виводу.

Означення. Лівостороннім аналізом Синтаксичний аналіз в мовних процесорах - student2.ru ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru будемо називати послідовність номерів правил, які були використані при лівосторонньому виводі Синтаксичний аналіз в мовних процесорах - student2.ru в G.

Приклад: Для граматики Синтаксичний аналіз в мовних процесорах - student2.ru зі схемою Р

Синтаксичний аналіз в мовних процесорах - student2.ru

для ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru побудуємо лівосторонній аналіз Синтаксичний аналіз в мовних процесорах - student2.ru :

Синтаксичний аналіз в мовних процесорах - student2.ru

З наведеного вище виводу ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru лівосторонній аналіз Синтаксичний аналіз в мовних процесорах - student2.ru буде: Синтаксичний аналіз в мовних процесорах - student2.ru , а синтаксичне дерево виводу Синтаксичний аналіз в мовних процесорах - student2.ru зображено на Мал. 4.

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

- стратегія "зверху донизу";

- стратегія "знизу вгору".

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru S

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru T

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru T * F

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru F ( S )

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru a S + T

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru T F

Синтаксичний аналіз в мовних процесорах - student2.ru F a

a

Мал. 4

Стратегія синтаксичного аналізу "зверху донизу" – це побудова синтаксичного дерева крок за кроком починаючи від кореня до крони.

Алгоритм 2. Синтез синтаксичного дерева на основі лівостороннього аналізу Синтаксичний аналіз в мовних процесорах - student2.ru ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru .

П0: Побудуємо корінь дерева та позначимо його аксіомою S. Тоді, якщо Синтаксичний аналіз в мовних процесорах - student2.ru , то

П1: Побудуємо дерево висоти один, взявши зі схеми Р правило з номером р1 виду Синтаксичний аналіз в мовних процесорах - student2.ru (Мал. 5):

S

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru

… …..

Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru Синтаксичний аналіз в мовних процесорах - student2.ru

Мал. 5.

Пі: На кроні дерева, отриманого на попередньому кроку, візьмемо перший зліва направо нетермінал (нехай це буде нетермінал Синтаксичний аналіз в мовних процесорах - student2.ru ) та правило з номером Синтаксичний аналіз в мовних процесорах - student2.ru виду: Синтаксичний аналіз в мовних процесорах - student2.ru та побудуємо нове дерево. Даний пункт виконувати доти, доки не переглянемо всі елементи з Синтаксичний аналіз в мовних процесорах - student2.ru .

Сформулюємо декілька проблем для стратегії аналізу "зверху донизу":

- у загальному випадку у класі КС-граматик існує проблема неоднозначності (недетермінізму) виводу Синтаксичний аналіз в мовних процесорах - student2.ru . Як приклад можемо розглянути граматику з "циклами". Це така граматика, у якої в схемі Синтаксичний аналіз в мовних процесорах - student2.ru існує така послідовність правил за участю нетермінала Синтаксичний аналіз в мовних процесорах - student2.ru , що:

Синтаксичний аналіз в мовних процесорах - student2.ru , де Синтаксичний аналіз в мовних процесорах - student2.ru — будь-який нетермінал граматики Синтаксичний аналіз в мовних процесорах - student2.ru .

- як наслідок з попереднього пункту, граматики з ліворекурсивним нетерміналом для стратегії аналізу "зверху донизу" недопустимі.

- існують підкласи класу КС-граматик, які природно забезпечують стратегію аналізу "зверху донизу". Один з таких підкласів — це LL(k)-граматики, які забезпечують синтаксичний аналіз ланцюжка Синтаксичний аналіз в мовних процесорах - student2.ru за час Синтаксичний аналіз в мовних процесорах - student2.ru , де Синтаксичний аналіз в мовних процесорах - student2.ru , та при цьому є однозначним.

Магазинні автомати

Означення. Магазинний автомат Синтаксичний аналіз в мовних процесорах - student2.ru — це сімка Синтаксичний аналіз в мовних процесорах - student2.ru ,

де: Синтаксичний аналіз в мовних процесорах - student2.ru — множина станів магазинного автомату;

Синтаксичний аналіз в мовних процесорах - student2.ru — основний алфавіт;

Синтаксичний аналіз в мовних процесорах - student2.ru — допоміжний алфавіт (алфавіт магазина);

Синтаксичний аналіз в мовних процесорах - student2.ru — початковий стан магазинного автомату;

Синтаксичний аналіз в мовних процесорах - student2.ru — початковий вміст магазину;

Синтаксичний аналіз в мовних процесорах - student2.ru ;

Синтаксичний аналіз в мовних процесорах - student2.ru — множина заключних станів автомата Синтаксичний аналіз в мовних процесорах - student2.ru .

Поточний стан магазинного автомата Синтаксичний аналіз в мовних процесорах - student2.ru описується конфігурацією. Конфігурація магазинного автомата Синтаксичний аналіз в мовних процесорах - student2.ru — це трійка Синтаксичний аналіз в мовних процесорах - student2.ru , де Синтаксичний аналіз в мовних процесорах - student2.ru . Серед конфігурацій магазинного автомата Синтаксичний аналіз в мовних процесорах - student2.ru виділимо дві:

- початкова конфігурація Синтаксичний аналіз в мовних процесорах - student2.ru , де Синтаксичний аналіз в мовних процесорах - student2.ru , Синтаксичний аналіз в мовних процесорах - student2.ru — вхідне слово ( Синтаксичний аналіз в мовних процесорах - student2.ru ),

Синтаксичний аналіз в мовних процесорах - student2.ru ;

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

Такт роботи (позначається ╞═ ) магазинного автомата Синтаксичний аналіз в мовних процесорах - student2.ru — це перехід від однієї конфігурації до іншої, а точніше:

Синтаксичний аналіз в мовних процесорах - student2.ru ╞═ Синтаксичний аналіз в мовних процесорах - student2.ru при умові, що Синтаксичний аналіз в мовних процесорах - student2.ru .

Робота магазинного автомата Синтаксичний аналіз в мовних процесорах - student2.ru (позначається ╞═*) — це послідовність тактів роботи, а точніше: Синтаксичний аналіз в мовних процесорах - student2.ru ╞═* Синтаксичний аналіз в мовних процесорах - student2.ru тоді і тільки тоді, коли Синтаксичний аналіз в мовних процесорах - student2.ru ╞═ Синтаксичний аналіз в мовних процесорах - student2.ru , Синтаксичний аналіз в мовних процесорах - student2.ru ╞═ Синтаксичний аналіз в мовних процесорах - student2.ru ,…, Синтаксичний аналіз в мовних процесорах - student2.ru ╞═ Синтаксичний аналіз в мовних процесорах - student2.ru .

Операції ╞═ та ╞═* можна трактувати як бінарні відношення на відповідних кортежах. Тоді робота магазинного автомата Синтаксичний аналіз в мовних процесорах - student2.ru — це рефлексивно-транзитивне замикання бінарного відношення ╞═.

Означення. Мова, яку розпізнає магазинний автомат Синтаксичний аналіз в мовних процесорах - student2.ru (позначається Синтаксичний аналіз в мовних процесорах - student2.ru ) - це множина ланцюжків, які задовольняють умові:

Синтаксичний аналіз в мовних процесорах - student2.ru ╞═* Синтаксичний аналіз в мовних процесорах - student2.ru .

Зафіксуємо наступні результати теорії магазинних автоматів:

1. Не існує алгоритму перетворення недетермінованого магазинного автомата у еквівалентний йому детермінований магазинний автомат.

2. Існує алгоритм, який вирішує проблему порожньої множини Синтаксичний аналіз в мовних процесорах - student2.ru для конкретного магазинного автомата.

3. Існує алгоритм, який за час, пропорційний Синтаксичний аналіз в мовних процесорах - student2.ru перевіряє, чи належить Синтаксичний аналіз в мовних процесорах - student2.ru мові, яку розпізнає магазинний автомат Синтаксичний аналіз в мовних процесорах - student2.ru .

4. Клас мов, які розпізнаються магазинними автоматами, співпадає з класом мов, що породжуються КС-граматиками.

На основі сформульованих вище результатів для лівосторонньої стратегії виводу Синтаксичний аналіз в мовних процесорах - student2.ru в Синтаксичний аналіз в мовних процесорах - student2.ru запропонуємо наступне твердження: для довільної КС-граматики Синтаксичний аналіз в мовних процесорах - student2.ru можна побудувати магазинний автомат Синтаксичний аналіз в мовних процесорах - student2.ru такий, що Синтаксичний аналіз в мовних процесорах - student2.ru . При цьому автомат буде моделювати лівосторонню стратегію виводу Синтаксичний аналіз в мовних процесорах - student2.ru в Синтаксичний аналіз в мовних процесорах - student2.ru .

Нехай Синтаксичний аналіз в мовних процесорах - student2.ru — КС-граматика. Побудуємо відповідний МП-автомат Синтаксичний аналіз в мовних процесорах - student2.ru :

- Синтаксичний аналіз в мовних процесорах - student2.ru — множину станів автомата складає один стан Синтаксичний аналіз в мовних процесорах - student2.ru ;

- Синтаксичний аналіз в мовних процесорах - student2.ru — допоміжний алфавіт;

- Синтаксичний аналіз в мовних процесорах - student2.ru — початковий вміст магазина.

- функцію Синтаксичний аналіз в мовних процесорах - student2.ru визначимо так:

- якщо Синтаксичний аналіз в мовних процесорах - student2.ru належить Синтаксичний аналіз в мовних процесорах - student2.ru , то

Синтаксичний аналіз в мовних процесорах - student2.ru .

- також поповнимо множину значень функції Синтаксичний аналіз в мовних процесорах - student2.ru наступними значеннями:

Синтаксичний аналіз в мовних процесорах - student2.ru .

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

- коли Синтаксичний аналіз в мовних процесорах - student2.ru — термінал Синтаксичний аналіз в мовних процесорах - student2.ru (тобто Синтаксичний аналіз в мовних процесорах - student2.ru ), тоді МП-автомат виконає наступний такт: Синтаксичний аналіз в мовних процесорах - student2.ru ╞═ Синтаксичний аналіз в мовних процесорах - student2.ru ;

- коли Синтаксичний аналіз в мовних процесорах - student2.ru — нетермінал, тоді в схемі Синтаксичний аналіз в мовних процесорах - student2.ru граматики Синтаксичний аналіз в мовних процесорах - student2.ru виберемо правило виду Синтаксичний аналіз в мовних процесорах - student2.ru , зробимо наступний крок безпосереднього виведення : Синтаксичний аналіз в мовних процесорах - student2.ru . При таких умовах автомат перейде в наступну конфігурацію: Синтаксичний аналіз в мовних процесорах - student2.ru ╞═ Синтаксичний аналіз в мовних процесорах - student2.ru .

Очевидно, якщо ланцюжок Синтаксичний аналіз в мовних процесорах - student2.ru виводиться за Синтаксичний аналіз в мовних процесорах - student2.ru кроків, то МП-автомат зробить Синтаксичний аналіз в мовних процесорах - student2.ru кроків та розпізнає Синтаксичний аналіз в мовних процесорах - student2.ru . Таким чином, Синтаксичний аналіз в мовних процесорах - student2.ru .

Наши рекомендации