Використовуючи " Принципи компіляторів, техніки та інструменти, 2-е видання " (WorldCat) Ахо, Лама, Сетхі та Уллмана, відомого як Книга фіолетового дракона ,
Лексема стор. 111
Лексема - це послідовність символів у вихідній програмі, яка відповідає шаблону маркера і визначається лексичним аналізатором як екземпляр цього маркера.
Маркер стор. 111
Токен - це пара, що складається з імені маркера та необов’язкового значення атрибута. Назва маркера - це абстрактний символ, що представляє свого роду лексичну одиницю, наприклад, певне ключове слово або послідовність вхідних символів, що позначають ідентифікатор. Імена маркерів - це вхідні символи, які обробляє парсер.
Візерунок стор. 111
Шаблон - це опис форми, яку можуть приймати лексеми лексеми. У випадку ключового слова як маркера, шаблон є просто послідовністю символів, що утворюють ключове слово. Для ідентифікаторів та деяких інших лексем шаблон є більш складною структурою, яка відповідає багатьом рядкам.
Малюнок 3.2: Приклади лексем стор. 112
[Token] [Informal Description] [Sample Lexemes]
if characters i, f if
else characters e, l, s, e else
comparison < or > or <= or >= or == or != <=, !=
id letter followed by letters and digits pi, score, D2
number any numeric constant 3.14159, 0, 6.02e23
literal anything but ", surrounded by "'s "core dumped"
Щоб краще зрозуміти це відношення до лексера та синтаксичного аналізатора, ми почнемо з синтаксичного аналізатора та працюватимемо назад до вхідних даних.
Щоб полегшити розробку синтаксичного аналізатора, синтаксичний аналізатор не працює безпосередньо з вхідними даними, а бере до списку маркери, створені лексером. Дивлячись на лексеми колонку на малюнку 3.2 ми бачимо маркери , такі як if
, else
, comparison
, id
, number
іliteral
; це назви лексем. Зазвичай для лексера / синтаксичного аналізатора маркер - це структура, що містить не тільки ім'я маркера, але символи / символи, що складають маркер, і початкову та кінцеву позицію рядка символів, що складають маркер, з початкове та кінцеве положення, що використовуються для повідомлення про помилки, виділення тощо.
Тепер лексер бере введення символів / символів і використовуючи правила лексера перетворює введені символи / символи в лексеми. Зараз люди, які працюють з lexer / parser, мають власні слова щодо речей, якими вони часто користуються. Те, що ви вважаєте послідовністю символів / символів, що складають маркер, те, що люди, які використовують лексер / парсери, називають лексемою. Отже, коли ви бачите лексему, просто подумайте про послідовність символів / символів, що представляють маркер. У прикладі порівняння послідовність символів / символів може бути різними візерунками, такими як <
або >
або else
або 3.14
тощо.
Інший спосіб думати про взаємозв'язок між ними полягає в тому, що маркер - це структура програмування, що використовується парсером, що має властивість, що називається лексемою, що містить символ / символи з вводу. Тепер, якщо ви подивитесь на більшість визначень маркера в коді, ви можете не розглядати лексему як одне з властивостей маркера. Це пов’язано з тим, що маркер, швидше за все, утримуватиме початкову та кінцеву позицію символів / символів, що представляють маркер і лексему, послідовність символів / символів може бути виведена з початкової та кінцевої позицій за необхідності, оскільки введення статичне.