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

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

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

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

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

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

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

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

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

sum=3+2;

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

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

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

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

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



Дивіться також[ред.ред. код]

Посилання[ред.ред. код]