Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ-2013-анн-130515.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

7.11. Работа с регулярными выражениями в языках программирования (c#, php). Описание типов xml-документов с помощью грамматики (dtd)

Регулярное выражение – это выражение, задающее (определяющее) множество цепочек регулярного языка. Регулярный язык – это язык, определяемый регулярной грамматикой (см. вопрос 1). В теории формальных языком и при описании КС-грамматик (расширенная форма Бэкуса-Наура) для описания регулярных выражений используются следующие метасимволы: “| “ – объединение множеств цепочек, “{ “ и “} “ – итерация множества цепочек, “[ “ и “] “ – необязательность цепочек множества. Для конкатенации (сцепления) метасимвола нет. В различных языках программирования набор метасимволов обычно шире.

Пример. Метасимволы регулярных выражений в команде findstr командной оболочкиWindows.

По команде findstr /R шаблон файл выводятся те строки из указанного файл, которые удовлетворяют регулярному выражению «шаблон»

Метасимволы следующие:

. Подстановочный знак: любой символ

* Повтор: ноль или более предшествующих символов или классов символов.

^ Позиция строки: начало строки

$ Позиция строки: конец строки

[класс] Класс символа: любой символ из множества

[^класс] Инвертированный класс: любой символ из множества

[x-y] Диапазон: любой символ из диапазона

\x Исключение: использование метасимвола x в качестве литерала

\<xyz Позиция слова: начало слова (есть слово, начинающееся с xyz)

xyz\> Позиция слова: конец слова (есть слово, заканчивающееся на xyz)

“xx yy” В строке есть подцепочка xx или yy (метасимволом является пробел)

Для XML-документа спецификация DTD (Data Type Document) служит для описания его структуры. Это описание располагается либо в самом документе, либо в отдельном файле (файле с расширением dtd). Фактически эта спецификация представляет собой КС-грамматику, где правая часть каждого правила является регулярным выражением.

Пример dtd-файла с описанием структуры XML-документа

<?xml version='1.0' encoding = "Windows-1251" ?>

<!ELEMENT library (book)+>

<!ELEMENT book (name, author) >

<!ELEMENT name (#PCDATA) >

<!ELEMENT author (#PCDATA) >

Описание эквивалентно КС-грамматике с правилами (в нотации РБНФ):

library book {book}

book name author

8. Методы распределения памяти и доступа к данным

8.1. Простые методы динамического распределения памяти: стек, дек, список блоков постоянной длины

Любой вычислительный процесс для своего выполнения нуждается в памяти, оперативной и внешней. Одна из важнейших задач операционной системы – выделение процессам по их требованию соответствующих ресурсов, то есть, распределение памяти. Задача распределения оперативной памяти должна решаться быстро и эффективно, в течение микросекунд. Внешняя, преимущественно дисковая, память допускает гораздо большие задержки.

В процессе назначения и освобождения памяти может сложиться положение, при котором участки свободной памяти разделены занятыми участками. В этом случае говорят о внешней фрагментации памяти. Предположим, процесс запросил блок памяти определенной длины, но согласно используемому алгоритму распределения памяти ему назначен больший блок. Тогда часть памяти он принципиально не может использовать, имеет место внутренняя фрагментация памяти. Эффективность алгоритмов распределения памяти обычно связывают с минимизацией фрагментации. Внешняя фрагментация может быть такой, что при достаточном суммарном объеме свободной памяти запрос связного участка необходимого размера не может быть реализован. Тогда запускается процесс объединения фрагментированной свободной памяти в одну область. Этот процесс обычно называются сбором мусора. Понятно, что он требует определенных ресурсов времени, поэтому нежелательно выполнять его слишком часто. Внутреннюю фрагментацию, к сожалению, за счет сбора мусора уменьшить не удается.