Лексичний аналіз
Лексичний розбір - це процес перетворення послідовності символів в послідовність токенів (груп символів що відповідають певним шаблонам), та визначення їх типів. Програма, чи функція що виконує лексичний аналіз, називається лексичним аналізатором, чи сканером. Часто сканер є звичайною функцію що використовується парсером (синтаксичним аналізатором), для отримання наступного токена з потоку вхідних символів в процесі компіляції. Також часто лексичний аналіз використовують для підсвітки синтаксису певних мов.
Зміст |
Будова [ред.]
Лексичний розбирач є скінченним автоматом, перехід в певні стани якого викликає функції, які зазвичай повертають тип лексеми, і саму лексему (токен).
Позначка (лексема/токен) [ред.]
Позначка — це рядок літералів, впорядкованих відповідно до правил (наприклад, IDENTIFIER, NUMBER, COMMA). Процес утворення позначок з вихідного потоку називається видобуванням позначок (англ. tokenization) і розбирач впорядковує їх за відповідними типами. Лексичний розбирач зазвичай нічого не робить з об'єднаннями позначок, це завдання припадає на синтаксичний розбирач. Наприклад, типовий лексичний розбирач розпізнає дужки як позначки, але перевіряє відповідність '(' і ')' дужок.
Припустімо наступний вираз на C:
sum=3+2;
Переводиться в таку таблицю:
| Lexeme | Token type |
|---|---|
| sum | Утотожнювач |
| = | Оператор надання значення |
| 3 | Число |
| + | Оператор додавання |
| 2 | Число |
| ; | Завершення твердження |
Позначки часто визначаються за допомогою регулярних виразів, що зрозумілі генераторам лексичних розбирачів таким як lex. Лексичний розбирач (чи створений автоматично приладдям на кшталт lex або вручну) читає потік символів, визначає лексеми в потоці, і впорядковує їх як позначки. Це називається «видобуванням позначок». Якщо розбирач натрапляє на непридатну позначку, він звітує про помилку.
Наступним кроком іде синтаксичний розбір. Звідти, витрактовані дані можуть бути завантажені в структури даних для загального використання, інтерпретації, компіляції.
Генератори сканерів [ред.]
Дивіться також [ред.]
Посилання [ред.]
- Використано матеріали зі статті в англійській Вікіпедії.
| Ця стаття не містить посилань на джерела. (листопад 2010) |
