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

Як здійснюється лексичний аналіз слова? Відповідь на поставлене запитання ви дізнаєтесь із цієї статті. Крім цього, до вашої уваги буде представлено кілька прикладів такого розбору.

Загальна інформація

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

7. Слово «косар» - застаріле. Відповідно, воно не є частиною активного словникового запасу сучасних людей.

Лексичний розбір слова «золота»

Проаналізуємо слово "золота", яке входить у таку пропозицію: "Прийшла до нас золота осінь".

1. Золота осінь – пора року, коли всі дерева та трави стають жовтими та нагадують відтінок золота (металу).

2. Слово «золота» має кілька значень, а саме:

  • зроблений із золота;
  • шитий золотом;
  • обчислюваний за курсом золота;
  • подібний до кольору золота;
  • чудовий, дуже гарний та чудовий;
  • сприятливий та найщасливіший;
  • коханий, дорогий (у зверненні до будь-кого);
  • мінералогічні та ботанічні назви.

3. Значення – переносне.

4. Вид переносного значення словосполучення «золота осінь» - метафора (позначає подібний до кольору золота).

5. Синонімами виразу «золота» є такі: жовта, казкова, чудова та ін.

6. Слово «золота» має такі антоніми: брудна, огидна, погана, погана.

9. Слово «золота» - не застаріле. Відповідно, є частиною активного словникового запасу сучасних людей.

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

Наведемо ще кілька прикладів:

  • Лексичний розбір слова «фантастичних» у реченні «Я надивився фантастичних фільмів»:

1. Фантастичний фільм - вигаданий фантазією і насправді не існує.

2. Слово «фантастичний» має кілька значень, а саме: чарівний та химерний; неймовірний та нездійсненний; що не існує і є фантазією.

3. Значення – пряме.

4. Синонімами слова є такі: неймовірний, приголомшливий, що не відповідає реальності.

5. Має такі антоніми: типовий, банальний.

7. Походження - запозичене з англійської (fantastic).

8. Цей вираз є загальновживаним. Воно може застосовуватися у будь-яких стилях мови.

  • Лексичний розбір слова «доброті» в реченні: «За душевною добротою він віддав весь свій одяг»:

1. По доброті - душевна якість, що виражається у дбайливому і ніжному ставленні до будь-кого.

2. Слово «доброта» має лише одне значення.

3. Значення – пряме.

4. Синонімами слова є такі: добрий, добродушний, добродушний, людинолюбний.

5. Має такі антоніми: злий, жорстокий.

7. Походження - споконвічно російське.

8. Цей вираз є загальновживаним. Воно може застосовуватися у будь-яких стилях мови.

9. Вираз не застарілий. Відповідно, є частиною активного словникового запасу сучасних людей.

10. Застосовується у таких фразеологізмах: за добротою душевною, сліпа доброта та ін.

Сторінка 1 з 14

ВСТУП

В останньому розділі я залишив вас з компілятором котрий мусить майже працювати, за винятком того, що ми досі обмежені одно-символьними токенами. Мета цього уроку полягає в тому, щоб позбавитися цього обмеження раз і назавжди. Це означає, що ми повинні мати справу з концепцією лексичного аналізатора (сканера).

Можливо я маю згадати, чому нам взагалі потрібен лексичний аналізатор... врешті-решт досі ми були здатні добре справлятися і без нього навіть коли ми передбачили багато символьних токенів.

Єдина причина насправді має відношення до ключових слів. Це факт комп'ютерного життя, що синтаксис ключового слова має ту саму форму, що й синтаксис будь-якого іншого ідентифікатора. Ми не можемо сказати, поки не отримаємо повне слово, чи дійсно це ключове слово. Наприклад, змінна IFILE і ключове слово IF виглядають просто однаковими до тих пір, поки ви не отримаєте третій символ. У прикладах до теперішнього часу ми були завжди здатні прийняти рішення, засноване на першому символі токена, але це більше неможливо, коли присутні ключові слова. Нам необхідно знати, що цей рядок є ключовим словом до того, як ми почнемо його обробляти. І саме тому нам потрібний сканер.

На останньому уроці я також пообіцяв, що ми могли б передбачити нормальні токени без глобальних змін того, що ми вже зробили. Я не збрехав... ми можемо, як ви побачите пізніше. Але щоразу, коли я мав намір вбудувати ці елементи в синтаксичний аналізатор, який ми вже збудували, у мене виникали погані почуття щодо них. Все це дуже схоже на тимчасовий захід. Зрештою я з'ясував причину проблеми: я встановив програму лексичного аналізу, не пояснивши вам спочатку все про лексичний аналіз, і які є альтернативи. До цього часу я старанно уникав давати вам багато теорії і, звісно, ​​альтернативні варіанти. Я зазвичай не сприймаю добре підручники, які дають двадцять п'ять різних способів зробити щось, але ніяких відомостей про те, який спосіб найкраще вам підходить. Я спробував уникнути цієї пастки, просто показавши один спосіб, який працює.

Але це важлива сфера. Хоча лексичний аналізатор навряд чи є найбільш захоплюючою частиною компілятора, він часто має найбільш глибокий вплив на загальне сприйняття мови, оскільки ця частина найбільш близька користувачеві. Я вигадав специфічну структуру сканера, який буде використовуватися з KISS. Вона відповідає сприйняттю, яке я хочу від цієї мови. Але вона може зовсім не працювати для мови, яку ви придумаєте ви, тому в цьому випадку я відчуваю, що вам важливо знати ваші можливості.

Тому я збираюся знову відхилитись від свого звичайного розпорядку. На цьому уроці ми заберемося набагато глибше, ніж зазвичай, базову теорію мов і граматик. Я також буду говорити про інші області крім компіляторів, в яких лексичний аналіз відіграє важливу роль. Насамкінець я покажу вам деякі альтернативи для структури лексичного аналізатора. Тоді й тільки тоді ми повернемося до нашого синтаксичного аналізатора з останнього розділу. Потерпіть... я думаю ви знайдете, що це варте очікування. Фактично, оскільки сканери мають безліч застосувань поза компіляторами, ви зможете легко переконатися, що це буде найбільш корисний для вас урок.

  • lex - стандартний генератор в Unix
  • Flex - альтернативний варіант класичної "lex" утиліти
  • JLex - генератор на Java
  • gplex - генератор лексичних аналізаторів для С#
  • OOLEX - об'єктно-орієнтований генератор аналізаторів
  • alex - генератор лексичних аналізаторів для Haskell
  • leex - генератор для Erlang

Література

  • Альфред В. Ахо, Моніка С. Лам, Раві Мережі, Джеффрі Д. Ульман.Компілятори: принципи, технології та інструментарій = Compilers: Principles, Techniques, and Tools. - 2-ге вид. – М.: Вільямс, 2008. – ISBN 978-5-8459-1349-4
  • Робін ХантерОсновні концепції компіляторів = The Essence of Compilers. – М.: «Вільямс», 2002. – С. 256. – ISBN 5-8459-0360-2

Wikimedia Foundation. 2010 .

  • Краснохолмський район Тверської області
  • Східний факультет Санкт-Петербурзького державного університету

Дивитися що таке "Лексичний аналіз" в інших словниках:

    Лексичний аналіз- Перевірка правильності лексем. Лексичний аналіз програми виконується за її трансляції. також: Транслятори Фінансовий словник Фінам … Фінансовий словник

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

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

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

    Лінгвостилістичний аналіз художнього тексту- - Докладний і ретельний аналіз ролі та функцій мовних засобів різних рівнів в організації та вираженні ідейно-тематичного змісту твору. Початок формування теоретичних засад Л. а. х. т. було закладено у роботі відомого російського… … Стилістичний енциклопедичний словник російської мови

    смисловий аналіз тексту- 1. Вивчення ключових лексичних засобів та словесно-художнє структурування тексту в цілому. 2. Вивчення мовної домінанти тексту (стилістичної чи естетичної). 3. Порівневе вивчення тексту, у якому лексичний рівень є… Словник лінгвістичних термінів Т.В. Жеребило

    смисловий аналіз тексту- 1. Вивчення ключових лексичних засобів та словесно-художнє структурування тексту в цілому. 2. Вивчення мовної домінанти тексту (стилістичної чи естетичної). 3. Порівневе вивчення тексту, у якому лексичний рівень… … Методи дослідження та аналізу тексту. Словник-довідник

    Lexical scan- Лексичний аналіз … Короткий тлумачний словник з поліграфії

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

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

Лексичний аналіз – це процес сканування потоку вхідних символів та поділу його на рядки, які називають лексемами. Більшість книг з компіляторів починаються з цього і присвячують кілька розділів обговоренню різних методів побудови сканерів. Такий підхід має своє місце, але, як ви вже бачили, існує безліч речей, які ви можете зробити навіть ніколи не звертаючись до цього питання, і, фактично, сканер, який ми тут закінчимо, не дуже буде нагадувати те, що ці тексти описують . Причина? Теорія компіляторів і, отже, програми з неї, повинні працювати з більшістю загальних правил синтаксичного аналізу. Ми ж цього не робимо. У реальному світі можна визначити синтаксис мови таким чином, що буде досить простого сканера. І, як завжди, KISS – наш девіз.

Як правило, лексичний аналізатор створюється як окрема частина компілятора, тому синтаксичний аналізатор по суті бачить тільки потік вхідних лексем. Теоретично немає необхідності відокремлювати цю функцію від решти синтаксичного аналізатора. Існує лише один набір синтаксичних рівнянь, який визначає всю мову, тому теоретично ми могли б написати весь аналізатор в одному модулі.

Навіщо поділ? Відповідь має і теоретичну та практичну основи.

1956-го Ноам Хомський визначив «Ієрархію Хомського» для граматик. Ось вони:

Тип 0. Необмежені (наприклад, Англійська мова)

Тип 1. Контекстно-залежні

Тип 2. Контекстно-вільні

Тип 3. Регулярні.

Деякі характеристики типових мов програмування (особливо старих, таких як Фортран) відносять їх до Типу 1, але більшість всіх сучасних мов програмування може бути описана з використанням лише двох останніх типів і з ними ми тут будемо працювати.

Хороша сторона цих двох типів у тому, що існують дуже специфічні шляхи їхнього аналізу. Було показано, що будь-яка регулярна граматика може бути аналізована з використанням приватної форми абстрактної машини, яка називається кінцевим автоматом. Ми вже реалізовували кінцеві автомати в деяких наших розпізнаючих програм.

Аналогічно граматики типу 2 (контекстно-вільні) завжди можуть бути аналізовані з використанням магазинного автомата (кінцевий автомат, доповнений стеком). Ми також продавали ці машини. Замість реалізації явного стека до виконання роботи ми поклалися на вбудований стік пов'язані з рекурсивним кодуванням і це є переважним методом для низхідного синтаксичного аналізу.

Трапляється що в реальних, практичних граматика частини, які кваліфікуються як регулярні вирази, мають схильність бути низькорівневими частинами, як визначення ідентифікатора:

::= [ | ]*

Так як потрібні різні види абстрактних машин для аналізу цих двох типів граматик, є сенс відокремити ці низькорівневі функції в окремий модуль, лексичний аналізатор, який будується на ідеї кінцевого автомата. Ідея полягає в тому, щоб використовувати найпростіший метод синтаксичного аналізу, необхідний для роботи.

Є інша, більш практична причина відділення сканера від синтаксичного аналізатора. Ми хочемо думати про вихідний вихідний файл як потік символів, які ми обробляємо праворуч наліво без повернень. Насправді це неможливо. Майже кожна мова має деякі ключові слова типу IF, WHILE та END. Як я згадав раніше, насправді ми не можемо знати, чи є цей рядок ключовим словом до тих пір, поки ми не досягнемо його кінця, що визначено пробілом або іншим роздільником. Так що ми повинні зберігати рядок досить довго для того, щоб з'ясувати, чи маємо ми ключове слово чи ні. Це обмежена форма перебору із поверненням.

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

З книги Давайте створимо компілятор! автора Креншоу Джек

Лексичний аналіз Вступ В останньому розділі я залишив вас з компілятором який повинен майже працювати, за винятком того, що ми досі обмежені односимвольними токенами. Мета цього уроку полягає в тому, щоб позбавитися цього обмеження раз і назавжди. Це

З книги Модель зрілості процесів розробки програмного забезпечення автора Паулк Марк

Лексичний аналіз Лексичний аналіз – це процес сканування потоку вхідних символів та поділу його на рядки, які називаються лексемами. Більшість книг з компіляторів починаються з цього та присвячують кілька розділів обговоренню різних методів побудови.

З книги Інтернет рішення від доктора Боба автора Сворт Боб

З книги Об'єктно-орієнтований аналіз та проектування з прикладами додатків на С++ автора Буч Граді

7.2.4. Вимірювання та аналіз Ключові практики розділу «Вимірювання та аналіз» описують основні методи вимірювань, необхідних для визначення статусу операцій, що належать до розділу «Виконані дії». Як невід'ємна частина групи ключових процесів, вимірювання

З книги Технології програмування автора Камаєв В А

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

З книги C ++. Збірник рецептів автора Дігінс Крістофер

Вимірювання та аналіз Вимірювання 1. Виконання вимірювань та використання їх результатів для визначення статусу заходів з розробки та вдосконалення виробничого процесу організації.

З книги 1С: Бухгалтерія 8 із нуля. 100 уроків для початківців автора Гладкий Олексій Анатолійович

Вимірювання та аналіз Вимірювання 1. Виконання вимірювань та використання їх результатів для з'ясування стану робіт з визначення виробничого процесу організації.

З книги автора

З книги автора

8.1. Аналіз Визначення меж цієї задачі Врізка ознайомила вас з вимогами до системи моніторингу погоди. Це досить просте завдання, вирішення якого дозволяє обійтися лише кількома класами. Інженер, не цілком досвідчений у всіх особливостях

З книги автора

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

З книги автора

10.1. Аналіз Визначення меж завдання Вимоги до системи складського обліку показані на врізанні. Це досить складна програмна система, що стосується всіх аспектів, пов'язаних з рухом товару на склад і зі складу. Для зберігання продукції служить, природно, реальний

З книги автора

11.1. Аналіз Визначення меж предметної області Як сказано у врізанні, ми маємо намір зайнятися криптоаналізом - процесом перетворення зашифрованого тексту на звичайний. У загальному випадку процес дешифрування є надзвичайно складним і не піддається навіть найпотужнішим.

З книги автора

12.1. Аналіз Визначення меж проблемної області Для більшості людей, що живуть у США, поїзди є символом епохи, що давно минула. У Європі та країнах Сходу ситуація зовсім протилежна. На відміну від США, у Європі мало національних та міжнародних

З книги автора

2.4. АНАЛІЗ ВИМОГ ДО СИСТЕМИ (СИСТЕМНИЙ АНАЛІЗ) І ФОРМУЛЮВАННЯ ЦІЛЕЙ Завдання оптимізації розробки програм полягає у досягненні цілей за мінімально можливої ​​витрати ресурсів. Системний аналіз на відміну від попереднього системного дослідження - це

З книги автора

3.5. Лексичний аналіз рядка, що містить число в експоненційній формі ПроблемаЄ рядок, що містить число в експоненційній формі, і потрібно зберегти значення числа в змінній типу double.РішенняНайпростішим способом аналізу числа в експоненційній формі

З книги автора

Урок № 96. Аналіз рахунку та аналіз субконто Аналіз рахунку також належить до популярних звітів програми "1С". Щоб сформувати цей звіт, необхідно виконати команду головного меню Звіти | Аналіз рахунку, потім у вікні вказати звітний період, рахунок та

ЛАБОРАТОРНА РОБОТА 3. ВИВЧЕННЯ ЕТАПУ ЛЕКСИЧНОГО АНАЛІЗУ ТРАНСЛЯТОРІВ МОВ ПРОГРАМУВАННЯ

Мета роботи:Вивчити методи побудови лексичних сканерів на основі кінцевих автоматів та формальних граматик.

Архітектура компілятора

Вихідна програма, написана деякою мовою програмування, є не що інше, як ланцюжок знаків. Програма, яка переводить програму з мови високого рівня в еквівалентну їй об'єктну, називається транслятором. Якщо відбувається переведення в машинні коди, транслятор називається компілятором. Компілятор перетворює цей ланцюжок знаків на ланцюжок бітів - об'єктний код. Дуже зручно процес компіляції логічно розділити на кілька послідовних етапів:

Препроцесування;

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

Синтаксичний аналіз;

генерація коду;

Оптимізація програми.

Розглянемо докладніше етап лексичного аналізу. Програма, яка виконує цей етап, називається лексичний аналізатор або сканер. Сканер переводить текст вихідної програми із послідовності символів чи рядків у послідовність лексем. Лексема – мінімальний елемент мови програмування. Для заданої мови програмування кількість типів лексем передбачається кінцевим.

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

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

При лексичному аналізі розпізнаються три типи лексичних одиниць: термінальні символи, можливі ідентифікатори та літерали. Спершу всі лексичні одиниці порівнюються з елементами таблиці термінальних символів. У разі збігу розміщуються в таблиці стандартних символів. Кожен стандартний символ містить покажчик на таблицю, елементом якої є відповідна лексична одиниця та його індекс усередині цієї таблиці.

Після того, як лексична одиниця класифікована як "можливий ідентифікатор", опитується таблиця ідентифікаторів, якщо такого в таблиці ще немає, створюється новий елемент. Інша інформація до таблиці заноситься наступними фазами.

Числа, рядки символів, укладені в лапки та інші самовизначені дані, класифікуються як "літерали". Інформація про них заноситься до таблиці літералів. На відміну від ідентифікаторів, літерали дозволяють визначити їх атрибути.

Розглянемо приклад побудови описаних таблиць під час компіляції наступної програми:

char * b = ".dat";

Таблиця термінальних символів (TRM). Таблиця стандартних символів.

Символ Розділювач Інші Тип Індекс Рядок програми
; TRM main
( TRM (
) TRM )
, TRM {
main TRM int
int IDN a
{ TRM ;
} TRM char
= TRM *
+ IDN b
* TRM =
char TRM "
" LTR .dat
TRM "
IDN a
TRM =
IDN a
TRM +
LTR
TRM ;
TRM }

Таблиця ідентифікаторів (IDN). Таблиця літералів (LTR).

Розглянуті вище таблиці демонструють основні правила побудови. Таблиця термінальних символів вже закладена у компіляторі й у разі її вміст побудовано саме з прикладу.

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



Мови програмування високого рівня мають структуру вкладених блоків та процедур. Один і той же ідентифікатор може бути описаний та використаний у різних блоках. Правило знаходження відповідного ідентифікатора опису полягає в тому, щоб спочатку переглянути поточний блок (у якому використовується ідентифікатор), потім об'ємний блок і т.д. доки не буде знайдено опис даного ідентифікатора. Для цього використовується перелік блоків.

Таблиця блоків.

Лексичний сканер повинен враховувати області видимості та кодувати їх по-різному.

Зміст завдання:Розробити програму лексичного сканування та аналізу для заданих мови програмування та типів лексем. Програма має побудувати задані таблиці і основі перетворити аналізовану програму, замінивши шукані лексеми на мнемонические імена. Мнемонічні імена повинні генеруватися так, щоб будь-яка лексема замінювалася унікальним ім'ям, а ім'я відображало її тип (наприклад, I1 – перша лексема цілого типу).



Останні матеріали розділу:

Як ставилися мужики найближчих сіл до Бірюка: причини та несподіваний фінал Бірюк та мужик-злодій
Як ставилися мужики найближчих сіл до Бірюка: причини та несподіваний фінал Бірюк та мужик-злодій

Твори за твором Бірюк Бірюк і мужик-злодій Розповідь «Бірюк», написана І. С. Тургенєвим в 1848 році, увійшла до збірки «Записки мисливця».

Примара замку Гламіс: а чи був він насправді?
Примара замку Гламіс: а чи був він насправді?

Відповідями до завдань 1–24 є слово, словосполучення, число чи послідовність слів, чисел. Запишіть відповідь праворуч від номера завдання.

Доповідь: Пржевальський Микола Михайлович
Доповідь: Пржевальський Микола Михайлович

Цю пошукову роботу про сім'ю Пржевальських Михайло Володимирович писав до останніх хвилин свого життя. Багато що сьогодні бачиться інакше. Але наприкінці...