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

Как осуществляется лексический разбор слова? Ответ на поставленный вопрос вы узнаете из данной статьи. Кроме этого, вашему вниманию будет представлено несколько примеров такого разбора.

Общая информация

Лексический разбор слова осуществляется при помощи различных лингвистических словарей, а именно толкового, фразеологического, словаря антонимов, синонимов и омонимов.

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 - первая лексема целого типа).



Последние материалы раздела:

Важность Патриотического Воспитания Через Детские Песни
Важность Патриотического Воспитания Через Детские Песни

Патриотическое воспитание детей является важной частью их общего воспитания и развития. Оно помогает формировать у детей чувство гордости за свою...

Изменение вида звездного неба в течение суток
Изменение вида звездного неба в течение суток

Тема урока «Изменение вида звездного неба в течение года». Цель урока: Изучить видимое годичное движение Солнца. Звёздное небо – великая книга...

Развитие критического мышления: технологии и методики
Развитие критического мышления: технологии и методики

Критическое мышление – это система суждений, способствующая анализу информации, ее собственной интерпретации, а также обоснованности...