ї програми зліва направо з загляданням вперед на один термінальний символ (лексичний клас). p align="justify"> Вхід синтаксичного - послідовність лексем і таблиці, наприклад, таблиця зовнішніх уявлень, які є виходом лексичного аналізатора.
Вихід синтаксичного аналізатора - дерево розбору і таблиці, наприклад, таблиця ідентифікаторів і таблиця типів, які є входом для наступного перегляду компілятора (наприклад, це може бути перегляд, який здійснює контроль типів).
Для реалізації синтаксичного аналізатора обраний генератор аналізаторів GNU Bison. На вході даного генератора - опис граматики в БНФ, на виході - аналізує модуль на мові Сі.інтегрірован з Flex і отриманий з його допомогою аналізатор використовує в якості входу результати викликів функції yylex (). (Bison)-файл складається з трьох секцій - опису токенів, опису граматики і коду на Сі.
Код на Сі обов'язково повинен включати в себе реалізацію функції yyerror, яка є обробником помилок.
Опис токенів містить просто список можливих типів токенів. При генерації коду кожному типу токенів буде присвоєно унікальне значення типу yylval, яке і повертає yylex (). p align="justify"> Опис граматики містить в собі набір правил у БНФ і код на Сі, наприклад, для побудови дерева розбору, обробний кожне правило.
Приклад:
_expression/* Ok */
: postfix_expression {$ $ = $ 1;}
| INC_OP unary_expression {$ $ = makeTreeNode ($ 1, $ 2);}
| DEC_OP unary_expression {$ $ = makeTreeNode ($ 1, $ 2);}
| unary_operator cast_expression {$ $ = makeTreeNode ($ 1, $ 2);}
| SIZEOF unary_expression {$ $ = makeTreeNode ($ 1, $ 2);}
| SIZEOF '(' type_name ')' {$ $ = makeTreeNode ($ 1, $ 3);}
;
Змінні $ 1, $ 2 і т. д. в коді на Сі відповідають токені у вираженні, змінна $ $ - результат, який буде використаний при обробці вираження більш високого рівня. При збірці аналізує частини виходить файл c.parser.h, що містить LR-аналізатор на мові Сі. Аналізатор запускається викликом функції yyparse (). По завершенні аналізу функція повертає 0, якщо програма не містить синтаксичних помилок, або 1, якщо помилки є. br/>В
Рисунок 3 - приклад роботи лексичного аналізатора
В
Малюнок 4-розбір керуючої конструкції
В
Рисунок 5 - приклад роботи синтаксичного аналізатора (з помилками)
3. Семантичний аналізатор
Фаза контролю типів перевіряє, чи задовольняє програма контекстним умов. Головною складовою контекстних умови є "правильне використання" програмою типів даних, що надаються вхідним мовою, тобто коректність виразів, що зустрічаються ...