Що таке лексичний аналіз?
ЛЕКСИЧНИЙ АНАЛІЗ - це перша фаза проектування компілятора. Лексер бере модифікований вихідний код, який написаний у формі речень. Іншими словами, це допомагає вам перетворити послідовність символів у послідовність лексем. Лексичний аналізатор розбиває цей синтаксис на ряд лексем. Він видаляє зайвий простір або коментар, записаний у вихідному коді.
Програми, що виконують лексичний аналіз, називаються лексичними аналізаторами або лексерами. Лексер містить маркер або сканер. Якщо лексичний аналізатор виявляє, що маркер недійсний, він генерує помилку. Він зчитує потоки символів з вихідного коду, перевіряє наявність легальних токенів і передає дані аналізатору синтаксису, коли він вимагає.
Приклад
How Pleasant Is The Weather?
Дивіться цей приклад; Тут ми легко можемо визнати, що є п’ять слів «Як приємно», «Погода». Це дуже природно для нас, оскільки ми можемо розпізнати роздільники, пробіли та розділові знаки.
HowPl easantIs Th ewe ather?
Тепер, перевірте цей приклад, ми також можемо це прочитати. Однак це займе деякий час, оскільки розділювачі розміщені в непарних місцях. Це не те, що приходить до вас відразу.
У цьому підручнику ви дізнаєтесь
- Основні термінології:
- Архітектура лексичного аналізатора: як розпізнаються маркери
- Ролі лексичного аналізатора
- Лексичні помилки
- Відновлення помилок у лексичному аналізаторі
- Лексичний аналізатор проти аналізатора
- Навіщо відокремлювати лексичний та синтаксичний аналізатор?
- Переваги лексичного аналізу
- Недолік лексичного аналізу
Основні термінології
Що таке лексема?
Лексема - це послідовність символів, які включені у вихідну програму відповідно до шаблону відповідності лексеми. Це не що інше, як екземпляр маркера.
Що є символом?
Маркер - це послідовність символів, яка представляє одиницю інформації у вихідній програмі.
Що таке візерунок?
Шаблон - це опис, який використовується маркером. У випадку ключового слова, яке використовується як маркер, шаблон являє собою послідовність символів.
Архітектура лексичного аналізатора: як розпізнаються маркери
Основне завдання лексичного аналізу - читати введені символи в коді та виробляти лексеми.
Лексичний аналізатор сканує весь вихідний код програми. Він ідентифікує кожен маркер по одному. Зазвичай сканери реалізуються для створення токенів лише на запит синтаксичного аналізатора. Ось як це працює -
- "Отримати наступний маркер" - це команда, яка надсилається з парсера на лексичний аналізатор.
- Отримавши цю команду, лексичний аналізатор сканує вхідні дані, поки не знайде наступний маркер.
- Він повертає маркер Parser.
Лексичний аналізатор пропускає пробіли та коментарі під час створення цих маркерів. Якщо є якась помилка, тоді Лексичний аналізатор співвідносить цю помилку з вихідним файлом та номером рядка.
Ролі лексичного аналізатора
Лексичний аналізатор виконує нижче задані завдання:
- Допомагає ідентифікувати маркер у таблиці символів
- Видаляє пробіли та коментарі з вихідної програми
- Співвідносить повідомлення про помилки з вихідною програмою
- Допомагає розширити макроси, якщо вони знайдені у вихідній програмі
- Прочитайте введені символи з вихідної програми
Приклад лексичного аналізу, маркери, нетокени
Розглянемо наступний код, який подається до Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Приклади створених жетонів
Лексема | Токен |
інт | Ключове слово |
максимум | Ідентифікатор |
( | Оператор |
інт | Ключове слово |
х | Ідентифікатор |
, | Оператор |
інт | Ключове слово |
Y | Ідентифікатор |
) | Оператор |
{ | Оператор |
Якщо | Ключове слово |
Приклади Nontokens
Тип | Приклади |
Прокоментуйте | // Це дозволить порівняти 2 числа |
Директива попереднього процесора | #include |
Директива попереднього процесора | #define NUMS 8,9 |
Макрос | НОМЕР |
Пробіл | / н / б / т |
Лексичні помилки
Послідовність символів, яку неможливо просканувати в будь-який дійсний маркер, є лексичною помилкою. Важливі факти про лексичну помилку:
- Лексичні помилки не дуже поширені, але вирішувати їх слід за допомогою сканера
- Помилка написання ідентифікаторів, операторів, ключового слова вважається лексичною помилкою
- Як правило, лексична помилка спричинена появою якогось незаконного символу, переважно на початку лексеми.
Відновлення помилок у лексичному аналізаторі
Ось декілька найпоширеніших методів відновлення помилок:
- Видаляє один символ із залишку вводу
- У режимі паніки послідовні символи завжди ігноруються, поки ми не досягнемо добре сформованого маркера
- Вставивши відсутній символ у залишок вводу
- Замініть персонажа іншим персонажем
- Транспонуйте два послідовних символи
Лексичний аналізатор проти аналізатора
Лексичний аналізатор | Парсер |
Програма сканування вводу | Виконайте аналіз синтаксису |
Визначте жетони | Створіть абстрактне подання коду |
Вставте маркери в таблицю символів | Оновити записи таблиці символів |
Це породжує лексичні помилки | Він генерує дерево синтаксичного аналізу вихідного коду |
Навіщо відокремлювати лексичний та синтаксичний аналізатор?
- Простота дизайну: це полегшує процес лексичного аналізу та аналізу синтаксису, усуваючи небажані лексеми
- Для підвищення ефективності компілятора: Допомагає підвищити ефективність компілятора
- Спеціалізація: спеціалізовані методи можна застосовувати для вдосконалення процесу лексичного аналізу
- Переносимість: для зв’язку із зовнішнім світом потрібен лише сканер
- Вища портативність: особливості, характерні для пристрою введення, обмежені для lexer
Переваги лексичного аналізу
- Метод лексичного аналізатора використовується такими програмами, як компілятори, які можуть використовувати проаналізовані дані з коду програміста для створення скомпільованого двійкового виконуваного коду
- Він використовується веб-браузерами для форматування та відображення веб-сторінки за допомогою проаналізованих даних з JavsScript, HTML, CSS
- Окремий лексичний аналізатор допомагає вам створити спеціалізований та потенційно більш ефективний процесор для цього завдання
Недолік лексичного аналізу
- Вам потрібно витратити значний час на читання вихідної програми та розділення її у вигляді лексем
- Деякі регулярні вирази досить важко зрозуміти порівняно з правилами PEG або EBNF
- Потрібно більше зусиль для розробки та налагодження лексера та його описів маркерів
- Додаткові накладні витрати на виконання необхідні для створення таблиць лексера та побудови маркерів
Резюме
- Лексичний аналіз - це перший етап у розробці компілятора
- Лексема - це послідовність символів, які включені у вихідну програму відповідно до шаблону відповідності лексеми
- Лексичний аналізатор реалізований для сканування всього вихідного коду програми
- Лексичний аналізатор допомагає ідентифікувати маркер у таблиці символів
- Послідовність символів, яку неможливо просканувати в будь-який дійсний маркер, є лексичною помилкою
- Видалення одного символу з решти введених даних корисний метод відновлення помилок
- Лексичний аналізатор сканує вхідну програму, а парсер виконує синтаксичний аналіз
- Це полегшує процес лексичного аналізу та аналізу синтаксису, усуваючи небажані лексеми
- Лексичний аналізатор використовується веб-браузерами для форматування та відображення веб-сторінки за допомогою проаналізованих даних з JavsScript, HTML, CSS
- Найбільший недолік використання лексичного аналізатора полягає в тому, що йому потрібні додаткові накладні витрати на виконання, необхідні для створення таблиць лексера та побудови токенів