lex (813547), страница 4

Файл №813547 lex (Метода по лексу) 4 страницаlex (813547) страница 42020-11-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Из диапазонасимволов этого класса исключена цифра 0, с которой, очевидно, не может начинаться не можетначинаться натуральное число. Это регулярное выражение также возможность совпаденияисключает совпадения с числом 0, которое не принадлежит натуральному ряду чисел. Следуетотметить, что в данном случае весьма проблематично построить эквивалентное регулярноевыражение, используя оператор объединения.Похожими возможностями обладает квантификатор +, который также как метасимвол *,обеспечивает многократное повторение элементов входного потока, но гарантирует наличиехотя бы одного экземпляра, удовлетворяющего регулярному выражению. В теории формальныхязыков эту регулярную операцию часто называют позитивным замыканием Клини.

Она можетбыть успешно использована, например, для спецификации символьных разделителейинформационных структур. Обычно в разделителях допускается произвольное количестворазделяющих символов, но обязательно должен быть хотя бы один. В частности, следующеерегулярное выражение позволяет идентифицировать разделители из произвольного числасимволов пробела и горизонтальной табуляции:[ \t]+Следует отметить, что для данного случая можно построить эквивалентное регулярноевыражение, используя квантификатор *, которое имеет следующий вид:[ \t][ \t]*Кроме рассмотренных одно-символьных квантификаторов генератор LEX предоставляетспециальную мета-последовательность, которая позволяет конкретно задавать наименьшееобязательное и наибольшее допустимое число экземпляров повторений. Эта конструкцияназывается интервальным квантификатором и имеет следующий формат:R{N,M}В этой конструкции, параметры N и M, указанные в фигурных скобках, задают целыенеотрицательные десятичные числа, которые устанавливают, соответственно, минимальное имаксимальное количество повторений во входном потоке символа или фрагмента регулярноговыражения,обозначенноголитеройRпередфигурнымискобками.Вконструкцииинтервального квантификатора значение первого целочисленного параметра не должнопревосходить величины второго целочисленного параметра, а литерал, допустимый диапазонповторений которого они определяют, может быть любым символом.

Наиболее частоиспользуется вариант применения интервального квантификатора, когда заданное минимальноеколичество повторений строго меньше максимального (N<M). Такая интервальнаяконструкция удобна, например, для распознавания идентификаторов переменных и констант висходных текстах программ.Синтаксис большинства современных языков программирования допускает идентификаторы,образованные последовательностью из алфавитно-цифровых символов и знака подчеркивания,которая не может начинаться с цифры. Распознаваемая длина идентификатора частоогранивается32-мясимволами.Перечисленнымусловиямудовлетворяетследующеерегулярное выражение:[a-zA-Z_][ a-zA-Z_0-9]{0,31}В этом регулярном выражении первый символьный класс определяет возможные вариантыпервой литеры идентификатора. Второй символьный класс вместе с суффиксом интервальногоквантификатора задает остальные литеры идентификатора в количестве от 0 до 31 экземпляров.Следует отметить, что если не требуется ограничивать максимальную длину идентификатора,то в рассмотренном регулярном выражении нужно заменить интервальный квантификатор{0,31} метасимволом *:[a-zA-Z_][a-zA-Z_0-9]*Менее распространенным является вариант спецификации интервального квантификатора, гдезаданные минимальное и максимальное значения количества повторений равны (N = M).

Этопозволяет задавать в регулярном выражении фиксированное количество повторений.Например, следующее регулярное выражение определяет огромное целое число, равноеединице с 24-мя нулями (1024), которое согласно представлениям современной астрофизикиопределяет размер видимой части Вселенной, выраженный в километрах:10{24,24}kmСледует отметить, что кроме применения в конструкции интервальных квантификаторов,метасимволы фигурных скобок используются генератором LEX для обозначения регулярныхопределений. Регулярные определения предоставляют возможность именовать фрагментырегулярных выражений и конструировать другие регулярные выражения с использованием этихимен в фигурных скобках, как если бы это были обычные текстовые символы. Обычно ониприменяются для упрощения записи сложных регулярных выражений или когда один и тот жерегулярный фрагмент присутствует в нескольких регулярных выражениях.Например, для спецификации инструкции инкремента языка программирования C, котораяобозначается парой знаков плюс (++) после идентификатора переменной, может бытьпредложено следующее регулярное выражение:{IDENT}\+\+В этой спецификации присутствует регулярное определение IDENT, которое может обозначатьлюбое из двух рассмотренных выше регулярных выражений для идентификатора.

ГенераторLEX автоматически подставляет соответствующий регулярный фрагмент, вместо регулярногоопределения в фигурных скобках. В результате подстановки получается, например, следующеерегулярное выражение:[a-zA-Z_][a-zA-Z_0-9]*\+\+Следует отметить, что концепция регулярных определений, принятая в генераторе LEX,напоминает технологию использования макроопределений, которая реализуется, например, всистеме программирования C директивой предпроцессорной обработки #define, в частности,для символического обозначения констант.Однако целесообразно помнить, что обработка регулярных определений не поддерживается вбольшинстведругихдиалектоврегулярныхвыраженийиявляетсяспецифическойособенностью генератора LEX.

Еще одно важное расширение стандартного аппаратарегулярных выражений, которое предоставляет генератор LEX, связано с поддержкойвозможности обработки входной информации в произвольно заданном контексте.ОБРАБОТКА КОНТЕКСТАРассмотренные выше якорные операторы ^ и $, обеспечивают поиск информации только вконтексте начала и конца входной строки. Однако генератор LEX поддерживает более широкиевозможности распознавания лексем входного потока с учетом произвольного правого илилевого контекста. В этой связи якорные операторы следует рассматривать как частный случайконтекстной обработки входного потока.Когда необходимо анализировать входной текст с учетом произвольного заданного правогоконтекста, в регулярном выражении следует использовать метасимвол дробной черты /,который обозначает регулярный оператор для обработки правого контекста.

В регулярномвыражениипередметасимволомдробнойчертызадаетсятребуемаяспецификацияраспознаваемой лексемы, а после него указывается правый контекст, в котором лексема должнаупотребляться во входном потоке. При этом следует учитывать, что после обработки лексемыее правый контекст остается во входном потоке. В общем случае регулярное выражение,чувствительное к правому контексту, имеет следующий формат:REGULAR/CONTEXTВ этой конструкции CONTEXT обозначает правый контекст, с учетом которого необходимоинтерпретировать входной поток по регулярному выражению REGULAR.В практических приложениях анализ правого контекста полезен при лексической обработкеразличных ограничителей информации, которые состоят из нескольких символов.

Например,синтаксис языка программирования Pascal требует использовать операторные ограничители,образованные символьными парами (* и *), для обозначения начала и конца комментария,соответственно. В тоже время символ * внутри комментария не должен интерпретироваться какначало или конец его операторного ограничителя. Решение этой проблемы обеспечиваетследующее регулярное выражение:\*/[^)]Данное регулярное выражение интерпретирует символ * как первый символ операторногоограничителя конца комментария, только когда во входном потоке за ним следует символзакрывающей круглой скобки. Это позволяет включать символы * в текст комментария, неопасаясь, что они будут распознаваться как часть завершающего его операторногоограничителя.Кроме обработки правого контекста генератор LEX предоставляет возможность указать врегулярном выражении необходимость анализа распознаваемых лексем с учетом их левогоконтекста во входном потоке.

Левый контекст специфицируется в форме алфавитно-цифровойметки предусловия, которая указывается в угловых скобках <> перед регулярным выражением.Метка предусловия обозначает логическое состояние процесса лексического анализа, в которомвходной поток сопоставляется с данным регулярным выражением и/или интерпретируетсяопределенным образом. В общем случае лексическая конструкция, которая обеспечивает анализвходного потока, чувствительный к левому контексту распознаваемых лексем, должна имеетследующий формат:<STATE>REGULARВ этой конструкции REGULAR обозначает регулярное выражение, которое становитсяактуальным, если выполнено предусловие, заданное меткой состояния STATE. Лексическийанализатор, в котором предусмотрена такая инструкция, будет обрабатывать входной поток порегулярному выражению REGULAR только тогда, когда выполнено предусловие, заданноеметкой STATE в угловых скобках.Иногда требуется осуществлять обработку входного потока по заданному регулярномувыражению при выполнении любого из нескольких предусловий.

В этом случае меткисоответствующих предусловий должны быть перечислены перед регулярным выражением вугловых скобках через запятую. Например, следующая конструкция разрешает анализвходного потока по регулярному выражению REGULAR, когда выполнено любое изпредусловий, которые обозначены метками STATE1 и STATE2:<STATE1,STATE2>REGULARВозможность анализа левого контекста позволяет придать большую практическую значимостьрассмотренному выше регулярному выражению для обработки операторных ограничителейкомментариев в исходных текстах программ, составленных на языке программирования Pascal.Очевидно, что символы *) следует интерпретировать как правый операторный ограничителькомментария, если предварительно во входном потоке по соответствующему регулярномувыражению была обнаружена и соответствующим образом обработана пара символов (*,которая обозначают левый операторный ограничитель комментария.

Эту проблему решает,например, следующее регулярное выражение с левым контекстом:<COMMENT>\*/[^)]В этой конструкции метка предусловия COMMENT обозначает состояние лексическогоанализатора, когда во входном потоке было обнаружено начало комментария. Еслипредусловие по метке COMMENT не выполнено, лексический анализатор считает неактуальнымпоследующее регулярное выражение для распознавания символов * внутри комментария и,следовательно, не будет интерпретировать входной поток согласно ему.Следует отметить, что в этом примере, также как выше в спецификации общего форматарегулярных выражений с левым контекстом, не рассматривается вопрос, каким образомустанавливаются и задаются метки предусловий. Исходя из методических соображений,технология конструирования и использования регулярных выражений с левым контекстом,будет рассмотрена ниже, в разделе правил спецификации лексем.ГРУППИРОВКА И ОГРАНИЧЕНИЕ РЕГУЛЯРНЫХ ФРАГМЕНТОВСущественно расширить возможности конструирования регулярных выражений позволяетприменениевнихметасимволовкруглыхскобок ().Аналогичноихфункциямварифметических или алгебраических конструкциях, в регулярных выражениях круглые скобкипозволяют изменять естественный приоритет операций.

Характеристики

Тип файла
PDF-файл
Размер
656,32 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6521
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее