Лексичний аналіз

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Лексичний розбір — це процес перетворення послідовності символів в послідовність токенів (груп символів що відповідають певним шаблонам), та визначення їх типів. Програма, чи функція що виконує лексичний аналіз, називається лексичним аналізатором, чи сканером. Часто сканер є звичайною функцією що використовується парсером (синтаксичним аналізатором), для отримання наступного токена з потоку вхідних символів в процесі компіляції. Також часто лексичний аналіз використовують для підсвітки синтаксису певних мов.

Будова[ред.ред. код]

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

Позначка (лексема/токен)[ред.ред. код]

Докладніше: Токен

Позначка — це рядок літералів, впорядкованих відповідно до правил (наприклад, IDENTIFIER, NUMBER, COMMA). Процес утворення позначок з вихідного потоку називається видобуванням позначок (англ. tokenization) і розбирач впорядковує їх за відповідними типами. Лексичний аналізатор зазвичай нічого не робить з об'єднаннями позначок, це завдання припадає на синтаксичний аналізатор. Наприклад, типовий сканер розпізнає дужки як позначки, але саме синтаксичний аналізатор перевіряє відповідність '(' і ')' дужок.

Припустімо наступний вираз на C:

sum=3+2;

Переводиться в таку таблицю:

Lexeme Token type
sum Утотожнювач
= Оператор надання значення
3 Число
+ Оператор додавання
2 Число
; Завершення твердження

Позначки часто визначаються за допомогою регулярних виразів, що зрозумілі генераторам лексичних розбирачів таким як lex. Лексичний розбирач (чи створений автоматично приладдям на кшталт lex або вручну) читає потік символів, визначає лексеми в потоці, і впорядковує їх як позначки. Це називається «видобуванням позначок». Якщо розбирач натрапляє на непридатну позначку, він звітує про помилку.

Наступним кроком іде синтаксичний розбір. Звідти, витрактовані дані можуть бути завантажені в структури даних для загального використання, інтерпретації, компіляції.

Генератори сканерів[ред.ред. код]


Див. також[ред.ред. код]