Лексичний розбір — це процес перетворення послідовності символів в послідовність токенів (груп символів що відповідають певним шаблонам), та визначення їх типів. Програма, чи функція що виконує лексичний аналіз, називається лексичним аналізатором, токенізатором чи сканером. Часто сканер є звичайною функцією що використовується парсером (синтаксичним аналізатором), для отримання наступного токена з потоку вхідних символів в процесі компіляції. Також часто лексичний аналіз використовують для підсвітки синтаксису певних мов.
Використання
Лексичний аналізатор формує першу фазу аналізу коду, що відбувається під час (початкової стадії) компіляції. Аналіз зазвичай відбувається за один прохід.
У старих мовах, таких як ALGOL, початкова стадія була замість реконструкції рядків, яка виконувала [en] та видалення пробілів і коментарів (та мала парсери без сканерів, без окремих лексичних аналізаторів). Ці кроки зараз виконуються як частина лексичного аналізатора.
Лексичні аналізатори та парсери найчастіше використовуються для компіляторів, але можуть використовуватися для інших мовних засобів, таких як лінтерів. Лексичний аналіз можна розділити на два етапи: сканування, яке сегментує вхідний рядок у синтаксичні одиниці, які називаються лексемами, та класифікує їх у класи токенів; та обчислення, яке перетворює лексеми в оброблені значення.
Лексичні аналізатори, як правило, досить прості, причому більша частина складності відкладена на фази парсера або семантичного аналізу, та можуть бути згенеровані генераторами лексичних аналізаторів, особливо за допомогою [en], або похідних. Однак, лексичні аналізатори можуть іноді мати деяку складність, таку як обробка структури фрази, щоб полегшити вхідні дані, та спростити парсер, та можуть бути написані частково, або повністю, вручну, або для підтримки більшої кількості функцій, або для більшої продуктивності.
Будова
Лексичний розбирач є скінченним автоматом, перехід в певні стани якого викликає функції, які зазвичай повертають тип лексеми, і саму лексему (токен).
Позначка (лексема/токен)
Токен — це рядок літералів, впорядкованих відповідно до правил (наприклад, IDENTIFIER, NUMBER, COMMA). Процес утворення позначок з вихідного потоку називається видобуванням позначок (англ. tokenization) і розбирач впорядковує їх за відповідними типами. Лексичний аналізатор зазвичай нічого не робить з об'єднаннями позначок, це завдання припадає на синтаксичний аналізатор. Наприклад, типовий сканер розпізнає дужки як позначки, але саме синтаксичний аналізатор перевіряє відповідність '(' і ')' дужок.
Припустімо наступний вираз на C:
sum=3+2;
Переводиться в таку таблицю:
Lexeme | Token type |
---|---|
sum | Утотожнювач |
= | Оператор надання значення |
3 | Число |
+ | Оператор додавання |
2 | Число |
; | Завершення твердження |
Позначки часто визначаються за допомогою регулярних виразів, що зрозумілі генераторам лексичних розбирачів таким як . Лексичний розбирач (чи створений автоматично приладдям на кшталт lex або вручну) читає потік символів, визначає лексеми в потоці, і впорядковує їх як позначки. Це називається «видобуванням позначок». Якщо розбирач натрапляє на непридатну позначку, він звітує про помилку.
Наступним кроком іде синтаксичний розбір. Звідти, витрактовані дані можуть бути завантажені в структури даних для загального використання, інтерпретації, компіляції.
Лексична граматика
Специфікація мови програмування часто містить набір правил, [en], що визначає лексичний синтаксис. Лексичний синтаксис зазвичай є регулярною мовою, граматичні правила складаються з регулярних виразів; вони визначають набір можливих послідовностей символів (лексеми) токена. Лексичний аналізатор розпізнає рядки, та для кожного рядка, знайденого лексичною програмою, вирішує як обробити, найчастіше просто створюється токен.
Дві важливі загальні лексичні категорії — це [en] і коментарі. Вони також визначаються в граматиці і обробляються лексичним аналізатором, але можуть бути відкинуті (не виробляючи жодних токенів) та вважатися незначними, не більше, ніж розділення двох токенів (як у випадку if x
замість ifx
). Існують два важливі винятки з цього приводу. По-перше, у мовах, що дотримуються [en], які розмежовують блоки з відступами, початковий пробіл є значним, оскільки він визначає структуру блоків і, як правило, обробляється на рівні лексичного аналізатора. По-друге, в деяких випадках використання лексичних аналізаторів, коментарі та пробіли мають бути збережені — наприклад, деякі інструменти зневадження можуть надавати програмісту повідомлення, що показують вихідний код. У 1960-х роках, особливо для ALGOL, пробіли та коментарі були усунені як частина фази реконструкції рядків (початкова фаза аналізу кода, що виконує компілятор), але ця окрема фаза була усунена, і тепер вони обробляються лексичним аналізатором.
Токенізація
Токенізація — це процес розмежування та, можливо, класифікації секцій рядка вхідних символів. Потім отримані токени передаються іншій формі обробки. Процес можна розглядати як підзадачу парсингу вхідних даних.
(Примітка: [en] в області комп'ютерної безпеки має інше значення.)
Наприклад, у рядку:
The quick brown fox jumps over the lazy dog
рядок не є неявно сегментованим на пробіли, як це зробить людина, котра спілкується звичайною мовою. Вхідні дані, 43 символи, повинні бути явно розділені на 9 токенів з даним розділювачем (тобто, відповідним до рядка " "
або регулярному виразу /\s{1}/
).
Ці токени можуть бути представлені в XML:
<sentence> <word>The</word> <word>quick</word> <word>brown</word> <word>fox</word> <word>jumps</word> <word>over</word> <word>the</word> <word>lazy</word> <word>dog</word> </sentence>
Або як s-вираз:
(sentence (word The) (word quick) (word brown) (word fox) (word jumps) (word over) (word the) (word lazy) (word dog))
Коли клас токенів представляє більше ніж одну лексему, лексичний аналізатор часто зберігає достатню кількість інформації, щоб відтворити оригінальну лексему, щоб її можна було використовувати у семантичному аналізі. Парсер зазвичай отримує цю інформацію від лексичного аналізатора та зберігає її в абстрактному синтаксичному дереві. Це необхідно для того, щоб уникнути втрати інформації у випадку чисел та ідентифікаторів.
Токени ідентифікуються на основі конкретних правил лексичного аналізатора. Деякі методи, які використовуються для ідентифікації токенів, містять: регулярні вирази, спеціальні послідовності символів, які називаються [en], спеціальні розділювальні символи, що називаються роздільниками та явно визначені за словником. Спеціальні символи, включаючи символи пунктуації, зазвичай використовуються лексичними аналізаторами для ідентифікації токенів через їх природне використання у письмових мовах та мовах програмування.
Токени часто класифікуються за вмістом символів або за контекстом у потоці даних. Категорії визначаються правилами лексичного аналізатора. Вони часто включають елементи граматики мови, що використовується в потоці даних. Мови програмування часто класифікують токени як ідентифікатори, оператори, символи групування або тип даних. Письмові мови зазвичай класифікують токени як іменники, дієслова, прикметники або знаки пунктуації. Категорії використовуються для подальшої обробки токенів або парсером, або іншими функціями у програмі.
Взагалі, лексичний аналізатор нічого не робить з комбінаціями токенів, ця задача залишається парсеру. Наприклад, типовий лексичний аналізатор розпізнає дужки як токени, але нічого не робить для того, щоб кожна «(» відповідала «)».
Коли лексичний аналізатор подає токени парсеру, він зазвичай представляє їх як перелічений список числових представлень. Наприклад, «Ідентифікатор» представлений як 0, «Оператор присвоєння» як 1, «Оператор додавання» як 2, і т. д.
Токени часто визначаються регулярними виразами, які розуміють генератори лексичних аналізаторів, такі як [en]. Лексичний аналізатор (згенерований автоматично інструментом, подібним до lex, або написаний вручну) читає в потік символів, ідентифікує лексеми в потоці і класифікує їх у токени. Це називається токенізацією. Якщо лексичний аналізатор знаходить невірний токен, він повідомить про помилку. Наступним за токенізацією проводиться парсинг. Починаючи звідси, інтерпретовані дані можуть бути завантажені в структури даних для загального використання, інтерпретації або компіляції.
Сканер
Перший етап, його називають сканером, зазвичай базується на скінченному автоматі. В ньому закодована інформація про можливі послідовності символів, які можуть міститися в будь-якому з токенів, які він обробляє (окремі екземпляри цих послідовностей символів називаються лексемами). Наприклад, цілочисельний токен може містити будь-яку послідовність цифрових символів. У багатьох випадках перший символ, що не є пробілом, може бути використаний для виведення наступного токена, далі наступні вхідні символи обробляються один за одним до досягнення символу, який не знаходиться в наборі символів, прийнятих для цього токена. У деяких мовах правила створення лексем є більш складними і можуть включати пошук з вертанням попередньо прочитаних символів. Наприклад, у C одного символу 'L' недостатньо, щоб відрізнити ідентифікатор, який починається з 'L', від [en], який є послідовністю символів.
Оцінювач
Лексема, однак, є лише рядком символів, відомих як певний тип (наприклад, строковий літерал, послідовність букв). Для того, щоб побудувати токен, лексичний аналізатор потребує другий етап, — оцінювання, який проходить по всім символам лексеми, щоб отримати значення. Тип лексеми в поєднанні з його значенням — це те, що правильно становить токен, який може бути наданий синтаксичному аналізатору. Деякі токени, такі як дужки, насправді не мають значень, і тому функція оцінювання для них може нічого не повертати: потрібний лише тип. Аналогічно, іноді оцінювачі можуть повністю приховати лексему від синтаксичного аналізатора, що є корисним для пробілів і коментарів. Оцінювачі для ідентифікаторів, як правило, прості (буквально представляють ідентифікатор), але можуть містити деяке [en]. Оцінювачі [en] можуть передавати рядок (відкладаючи оцінювання до фази семантичного аналізу), або можуть виконувати оцінювання власноруч, яке може бути залучено для різних основ або чисел з рухомою комою. Для простого літералу у лапках оцінювач має видалити лише лапки, але оцінювач для екранованого [en] містить лексичний аналізатор, який скасовує екранування послідовності.
Наприклад, у вихідному коді комп'ютерної програми, рядок
net_worth_future = (assets - liabilities);
може бути перетворений у наступний лексичний потік токенів; пробіли відхиляються, а спеціальні символи не мають значення:
IDENTIFIER net_worth_future EQUALS OPEN_PARENTHESIS IDENTIFIER assets MINUS IDENTIFIER liabilities CLOSE_PARENTHESIS SEMICOLON
У зв'язку з обмеженнями ліцензування існуючих парсерів, може виникнути необхідність створити лексичний аналізатор самостійно. Це можливо, якщо список токенів невеликий, але в цілому, лексичні аналізатори генеруються за допомогою автоматизованих інструментів. Ці інструменти зазвичай приймають регулярні вирази, які описують токени, дозволені у вхідному потоці. Кожен регулярний вираз пов'язаний з (правилом виводу) у лексичній граматиці мови програмування, яка оцінює лексеми, що відповідають регулярному виразу. Ці інструменти можуть генерувати вихідний код, який можна скомпілювати і виконати або побудувати таблицю переходів станів для кінцевого автомата (який підключений до коду шаблона для компіляції та виконання).
Регулярні вирази компактно зображують шаблони, за якими можуть слідувати символи в лексемах. Наприклад, для мови, що базується на англійський, токен IDENTIFIER може бути будь-яким англійським алфавітним символом або символом підкреслення, за яким слідує будь-яке число екземплярів ASCII символів та/або підкреслення. Це може бути компактно представлено рядком [a-zA-Z_][a-zA-Z_0-9]*
. Це означає «будь-який символ a-z, A-Z або _, за яким слідує 0 або більше a-z, A-Z, _ або 0-9».
Генератори сканерів
Див. також
Примітки
- Anatomy of a Compiler and The Tokenizer. www.cs.man.ac.uk. Архів оригіналу за 27 липня 2018. Процитовано 31 травня 2019.
- page 111, "Compilers Principles, Techniques, & Tools, 2nd Ed." (WorldCat) by Aho, Lam, Sethi and Ullman, as quoted in https://stackoverflow.com/questions/14954721/what-is-the-difference-between-token-and-lexeme [Архівовано 30 грудня 2016 у Wayback Machine.]
- Perl 5 Porters. perlinterp: Perl 5 version 24.0 documentation. perldoc.perl.org - Official documentation for the Perl programming language. perldoc.perl.org. Архів оригіналу за 18 жовтня 2018. Процитовано 26 січня 2017.
- Guy Coder (19 лютого 2013). What is the difference between token and lexeme?. Stack Overflow. Stack Exchange Inc. Архів оригіналу за 30 грудня 2016. Процитовано 26 січня 2017.
Джерела
- Compiling with C# and Java, Pat Terry, 2005,
- Algorithms + Data Structures = Programs, Niklaus Wirth, 1975,
- Compiler Construction, Niklaus Wirth, 1996,
- Sebesta, R. W. (2006). Concepts of programming languages (Seventh edition) pp. 177. Boston: Pearson/Addison-Wesley.
Посилання
- Yang, W.; Tsay, Chey-Woei; Chan, Jien-Tsai (2002). On the applicability of the longest-match rule in lexical analysis. Computer Languages, Systems & Structures. 28 (3): 273—288. doi:10.1016/S0096-0551(02)00014-0. NSC 86-2213-E-009-021 and NSC 86-2213-E-009-079. Архів оригіналу за 17 квітня 2022. Процитовано 30 травня 2019.
- Trim, Craig (23 січня 2013). The Art of Tokenization. Developer Works. IBM. Архів оригіналу за 30 травня 2019. Процитовано 30 травня 2019.
- Word Mention Segmentation Task [Архівовано 30 травня 2019 у Wayback Machine.], an analysis
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Leksichnij rozbir ce proces peretvorennya poslidovnosti simvoliv v poslidovnist tokeniv grup simvoliv sho vidpovidayut pevnim shablonam ta viznachennya yih tipiv Programa chi funkciya sho vikonuye leksichnij analiz nazivayetsya leksichnim analizatorom tokenizatorom 1 chi skanerom Chasto skaner ye zvichajnoyu funkciyeyu sho vikoristovuyetsya parserom sintaksichnim analizatorom dlya otrimannya nastupnogo tokena z potoku vhidnih simvoliv v procesi kompilyaciyi Takozh chasto leksichnij analiz vikoristovuyut dlya pidsvitki sintaksisu pevnih mov Zmist 1 Vikoristannya 2 Budova 3 Poznachka leksema token 4 Leksichna gramatika 5 Tokenizaciya 5 1 Skaner 5 2 Ocinyuvach 6 Generatori skaneriv 7 Div takozh 8 Primitki 8 1 Dzherela 9 PosilannyaVikoristannyared Leksichnij analizator formuye pershu fazu analizu kodu sho vidbuvayetsya pid chas pochatkovoyi stadiyi kompilyaciyi Analiz zazvichaj vidbuvayetsya za odin prohid U starih movah takih yak ALGOL pochatkova stadiya bula zamist rekonstrukciyi ryadkiv yaka vikonuvala zgortannya en ta vidalennya probiliv i komentariv ta mala parseri bez skaneriv bez okremih leksichnih analizatoriv Ci kroki zaraz vikonuyutsya yak chastina leksichnogo analizatora Leksichni analizatori ta parseri najchastishe vikoristovuyutsya dlya kompilyatoriv ale mozhut vikoristovuvatisya dlya inshih movnih zasobiv takih yak linteriv Leksichnij analiz mozhna rozdiliti na dva etapi skanuvannya yake segmentuye vhidnij ryadok u sintaksichni odinici yaki nazivayutsya leksemami ta klasifikuye yih u klasi tokeniv ta obchislennya yake peretvoryuye leksemi v obrobleni znachennya Leksichni analizatori yak pravilo dosit prosti prichomu bilsha chastina skladnosti vidkladena na fazi parsera abo semantichnogo analizu ta mozhut buti zgenerovani generatorami leksichnih analizatoriv osoblivo za dopomogoyu lex en abo pohidnih Odnak leksichni analizatori mozhut inodi mati deyaku skladnist taku yak obrobka strukturi frazi shob polegshiti vhidni dani ta sprostiti parser ta mozhut buti napisani chastkovo abo povnistyu vruchnu abo dlya pidtrimki bilshoyi kilkosti funkcij abo dlya bilshoyi produktivnosti Budovared Leksichnij rozbirach ye skinchennim avtomatom perehid v pevni stani yakogo viklikaye funkciyi yaki zazvichaj povertayut tip leksemi i samu leksemu token Poznachka leksema token red Dokladnishe Token Token 2 ce ryadok literaliv vporyadkovanih vidpovidno do pravil napriklad IDENTIFIER NUMBER COMMA Proces utvorennya poznachok z vihidnogo potoku nazivayetsya vidobuvannyam poznachok angl tokenization i rozbirach vporyadkovuye yih za vidpovidnimi tipami Leksichnij analizator zazvichaj nichogo ne robit z ob yednannyami poznachok ce zavdannya pripadaye na sintaksichnij analizator Napriklad tipovij skaner rozpiznaye duzhki yak poznachki ale same sintaksichnij analizator pereviryaye vidpovidnist i duzhok Pripustimo nastupnij viraz na C sum 3 2 Perevoditsya v taku tablicyu Lexeme Token type sum Utotozhnyuvach Operator nadannya znachennya 3 Chislo Operator dodavannya 2 Chislo Zavershennya tverdzhennya Poznachki chasto viznachayutsya za dopomogoyu regulyarnih viraziv sho zrozumili generatoram leksichnih rozbirachiv takim yak lex Leksichnij rozbirach chi stvorenij avtomatichno priladdyam na kshtalt lex abo vruchnu chitaye potik simvoliv viznachaye leksemi v potoci i vporyadkovuye yih yak poznachki 3 4 Ce nazivayetsya vidobuvannyam poznachok Yaksho rozbirach natraplyaye na nepridatnu poznachku vin zvituye pro pomilku Nastupnim krokom ide sintaksichnij rozbir Zvidti vitraktovani dani mozhut buti zavantazheni v strukturi danih dlya zagalnogo vikoristannya interpretaciyi kompilyaciyi Leksichna gramatikared Specifikaciya movi programuvannya chasto mistit nabir pravil leksichnu gramatiku en sho viznachaye leksichnij sintaksis Leksichnij sintaksis zazvichaj ye regulyarnoyu movoyu gramatichni pravila skladayutsya z regulyarnih viraziv voni viznachayut nabir mozhlivih poslidovnostej simvoliv leksemi tokena Leksichnij analizator rozpiznaye ryadki ta dlya kozhnogo ryadka znajdenogo leksichnoyu programoyu virishuye yak obrobiti najchastishe prosto stvoryuyetsya token Dvi vazhlivi zagalni leksichni kategoriyi ce probil en i komentari Voni takozh viznachayutsya v gramatici i obroblyayutsya leksichnim analizatorom ale mozhut buti vidkinuti ne viroblyayuchi zhodnih tokeniv ta vvazhatisya neznachnimi ne bilshe nizh rozdilennya dvoh tokeniv yak u vipadku if x zamist ifx Isnuyut dva vazhlivi vinyatki z cogo privodu Po pershe u movah sho dotrimuyutsya pravila ofsajdu en yaki rozmezhovuyut bloki z vidstupami pochatkovij probil ye znachnim oskilki vin viznachaye strukturu blokiv i yak pravilo obroblyayetsya na rivni leksichnogo analizatora Po druge v deyakih vipadkah vikoristannya leksichnih analizatoriv komentari ta probili mayut buti zberezheni napriklad deyaki instrumenti znevadzhennya mozhut nadavati programistu povidomlennya sho pokazuyut vihidnij kod U 1960 h rokah osoblivo dlya ALGOL probili ta komentari buli usuneni yak chastina fazi rekonstrukciyi ryadkiv pochatkova faza analizu koda sho vikonuye kompilyator ale cya okrema faza bula usunena i teper voni obroblyayutsya leksichnim analizatorom Tokenizaciyared Tokenizaciya ce proces rozmezhuvannya ta mozhlivo klasifikaciyi sekcij ryadka vhidnih simvoliv Potim otrimani tokeni peredayutsya inshij formi obrobki Proces mozhna rozglyadati yak pidzadachu parsingu vhidnih danih Primitka Tokenizaciya en v oblasti komp yuternoyi bezpeki maye inshe znachennya Napriklad u ryadku The quick brown fox jumps over the lazy dog ryadok ne ye neyavno segmentovanim na probili yak ce zrobit lyudina kotra spilkuyetsya zvichajnoyu movoyu Vhidni dani 43 simvoli povinni buti yavno rozdileni na 9 tokeniv z danim rozdilyuvachem tobto vidpovidnim do ryadka abo regulyarnomu virazu s 1 Ci tokeni mozhut buti predstavleni v XML lt sentence gt lt word gt The lt word gt lt word gt quick lt word gt lt word gt brown lt word gt lt word gt fox lt word gt lt word gt jumps lt word gt lt word gt over lt word gt lt word gt the lt word gt lt word gt lazy lt word gt lt word gt dog lt word gt lt sentence gt Abo yak s viraz sentence word The word quick word brown word fox word jumps word over word the word lazy word dog Koli klas tokeniv predstavlyaye bilshe nizh odnu leksemu leksichnij analizator chasto zberigaye dostatnyu kilkist informaciyi shob vidtvoriti originalnu leksemu shob yiyi mozhna bulo vikoristovuvati u semantichnomu analizi Parser zazvichaj otrimuye cyu informaciyu vid leksichnogo analizatora ta zberigaye yiyi v abstraktnomu sintaksichnomu derevi Ce neobhidno dlya togo shob uniknuti vtrati informaciyi u vipadku chisel ta identifikatoriv Tokeni identifikuyutsya na osnovi konkretnih pravil leksichnogo analizatora Deyaki metodi yaki vikoristovuyutsya dlya identifikaciyi tokeniv mistyat regulyarni virazi specialni poslidovnosti simvoliv yaki nazivayutsya flagom en specialni rozdilyuvalni simvoli sho nazivayutsya rozdilnikami ta yavno viznacheni za slovnikom Specialni simvoli vklyuchayuchi simvoli punktuaciyi zazvichaj vikoristovuyutsya leksichnimi analizatorami dlya identifikaciyi tokeniv cherez yih prirodne vikoristannya u pismovih movah ta movah programuvannya Tokeni chasto klasifikuyutsya za vmistom simvoliv abo za kontekstom u potoci danih Kategoriyi viznachayutsya pravilami leksichnogo analizatora Voni chasto vklyuchayut elementi gramatiki movi sho vikoristovuyetsya v potoci danih Movi programuvannya chasto klasifikuyut tokeni yak identifikatori operatori simvoli grupuvannya abo tip danih Pismovi movi zazvichaj klasifikuyut tokeni yak imenniki diyeslova prikmetniki abo znaki punktuaciyi Kategoriyi vikoristovuyutsya dlya podalshoyi obrobki tokeniv abo parserom abo inshimi funkciyami u programi Vzagali leksichnij analizator nichogo ne robit z kombinaciyami tokeniv cya zadacha zalishayetsya parseru Napriklad tipovij leksichnij analizator rozpiznaye duzhki yak tokeni ale nichogo ne robit dlya togo shob kozhna vidpovidala Koli leksichnij analizator podaye tokeni parseru vin zazvichaj predstavlyaye yih yak perelichenij spisok chislovih predstavlen Napriklad Identifikator predstavlenij yak 0 Operator prisvoyennya yak 1 Operator dodavannya yak 2 i t d Tokeni chasto viznachayutsya regulyarnimi virazami yaki rozumiyut generatori leksichnih analizatoriv taki yak Lex en Leksichnij analizator zgenerovanij avtomatichno instrumentom podibnim do lex abo napisanij vruchnu chitaye v potik simvoliv identifikuye leksemi v potoci i klasifikuye yih u tokeni Ce nazivayetsya tokenizaciyeyu Yaksho leksichnij analizator znahodit nevirnij token vin povidomit pro pomilku Nastupnim za tokenizaciyeyu provoditsya parsing Pochinayuchi zvidsi interpretovani dani mozhut buti zavantazheni v strukturi danih dlya zagalnogo vikoristannya interpretaciyi abo kompilyaciyi Skanerred Pershij etap jogo nazivayut skanerom zazvichaj bazuyetsya na skinchennomu avtomati V nomu zakodovana informaciya pro mozhlivi poslidovnosti simvoliv yaki mozhut mistitisya v bud yakomu z tokeniv yaki vin obroblyaye okremi ekzemplyari cih poslidovnostej simvoliv nazivayutsya leksemami Napriklad cilochiselnij token mozhe mistiti bud yaku poslidovnist cifrovih simvoliv U bagatoh vipadkah pershij simvol sho ne ye probilom mozhe buti vikoristanij dlya vivedennya nastupnogo tokena dali nastupni vhidni simvoli obroblyayutsya odin za odnim do dosyagnennya simvolu yakij ne znahoditsya v nabori simvoliv prijnyatih dlya cogo tokena U deyakih movah pravila stvorennya leksem ye bilsh skladnimi i mozhut vklyuchati poshuk z vertannyam poperedno prochitanih simvoliv Napriklad u C odnogo simvolu L nedostatno shob vidrizniti identifikator yakij pochinayetsya z L vid ryadkovogo literalu en yakij ye poslidovnistyu simvoliv Ocinyuvachred Leksema odnak ye lishe ryadkom simvoliv vidomih yak pevnij tip napriklad strokovij literal poslidovnist bukv Dlya togo shob pobuduvati token leksichnij analizator potrebuye drugij etap ocinyuvannya yakij prohodit po vsim simvolam leksemi shob otrimati znachennya Tip leksemi v poyednanni z jogo znachennyam ce te sho pravilno stanovit token yakij mozhe buti nadanij sintaksichnomu analizatoru Deyaki tokeni taki yak duzhki naspravdi ne mayut znachen i tomu funkciya ocinyuvannya dlya nih mozhe nichogo ne povertati potribnij lishe tip Analogichno inodi ocinyuvachi mozhut povnistyu prihovati leksemu vid sintaksichnogo analizatora sho ye korisnim dlya probiliv i komentariv Ocinyuvachi dlya identifikatoriv yak pravilo prosti bukvalno predstavlyayut identifikator ale mozhut mistiti deyake zgortannya en Ocinyuvachi cilochiselnih literaliv en mozhut peredavati ryadok vidkladayuchi ocinyuvannya do fazi semantichnogo analizu abo mozhut vikonuvati ocinyuvannya vlasnoruch yake mozhe buti zalucheno dlya riznih osnov abo chisel z ruhomoyu komoyu Dlya prostogo literalu u lapkah ocinyuvach maye vidaliti lishe lapki ale ocinyuvach dlya ekranovanogo strokovogo literalu en mistit leksichnij analizator yakij skasovuye ekranuvannya poslidovnosti Napriklad u vihidnomu kodi komp yuternoyi programi ryadok span class n net worth future span span class w span span class o span span class w span span class p span span class n assets span span class w span span class o span span class w span span class n liabilities span span class p span mozhe buti peretvorenij u nastupnij leksichnij potik tokeniv probili vidhilyayutsya a specialni simvoli ne mayut znachennya IDENTIFIER net worth future EQUALS OPEN PARENTHESIS IDENTIFIER assets MINUS IDENTIFIER liabilities CLOSE PARENTHESIS SEMICOLON U zv yazku z obmezhennyami licenzuvannya isnuyuchih parseriv mozhe viniknuti neobhidnist stvoriti leksichnij analizator samostijno Ce mozhlivo yaksho spisok tokeniv nevelikij ale v cilomu leksichni analizatori generuyutsya za dopomogoyu avtomatizovanih instrumentiv Ci instrumenti zazvichaj prijmayut regulyarni virazi yaki opisuyut tokeni dozvoleni u vhidnomu potoci Kozhen regulyarnij viraz pov yazanij z pravilom vivodu u leksichnij gramatici movi programuvannya yaka ocinyuye leksemi sho vidpovidayut regulyarnomu virazu Ci instrumenti mozhut generuvati vihidnij kod yakij mozhna skompilyuvati i vikonati abo pobuduvati tablicyu perehodiv staniv dlya kincevogo avtomata yakij pidklyuchenij do kodu shablona dlya kompilyaciyi ta vikonannya Regulyarni virazi kompaktno zobrazhuyut shabloni za yakimi mozhut sliduvati simvoli v leksemah Napriklad dlya movi sho bazuyetsya na anglijskij token IDENTIFIER mozhe buti bud yakim anglijskim alfavitnim simvolom abo simvolom pidkreslennya za yakim sliduye bud yake chislo ekzemplyariv ASCII simvoliv ta abo pidkreslennya Ce mozhe buti kompaktno predstavleno ryadkom a zA Z a zA Z 0 9 Ce oznachaye bud yakij simvol a z A Z abo za yakim sliduye 0 abo bilshe a z A Z abo 0 9 Generatori skanerivred lex FlexDiv takozhred Sintaksichnij analizPrimitkired Anatomy of a Compiler and The Tokenizer www cs man ac uk Arhiv originalu za 27 lipnya 2018 Procitovano 31 travnya 2019 page 111 Compilers Principles Techniques amp Tools 2nd Ed WorldCat by Aho Lam Sethi and Ullman as quoted in https stackoverflow com questions 14954721 what is the difference between token and lexeme Arhivovano 30 grudnya 2016 u Wayback Machine Perl 5 Porters perlinterp Perl 5 version 24 0 documentation perldoc perl org Official documentation for the Perl programming language perldoc perl org Arhiv originalu za 18 zhovtnya 2018 Procitovano 26 sichnya 2017 Guy Coder 19 lyutogo 2013 What is the difference between token and lexeme Stack Overflow Stack Exchange Inc Arhiv originalu za 30 grudnya 2016 Procitovano 26 sichnya 2017 Dzherelared Compiling with C and Java Pat Terry 2005 ISBN 032126360X Algorithms Data Structures Programs Niklaus Wirth 1975 ISBN 0 13 022418 9 Compiler Construction Niklaus Wirth 1996 ISBN 0 201 40353 6 Sebesta R W 2006 Concepts of programming languages Seventh edition pp 177 Boston Pearson Addison Wesley Posilannyared Yang W Tsay Chey Woei Chan Jien Tsai 2002 On the applicability of the longest match rule in lexical analysis Computer Languages Systems amp Structures 28 3 273 288 doi 10 1016 S0096 0551 02 00014 0 NSC 86 2213 E 009 021 and NSC 86 2213 E 009 079 Arhiv originalu za 17 kvitnya 2022 Procitovano 30 travnya 2019 Trim Craig 23 sichnya 2013 The Art of Tokenization Developer Works IBM Arhiv originalu za 30 travnya 2019 Procitovano 30 travnya 2019 Word Mention Segmentation Task Arhivovano 30 travnya 2019 u Wayback Machine an analysis Otrimano z https uk wikipedia org w index php title Leksichnij analiz amp oldid 43434218 Vidobuvannya poznachok