Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИСТЕМНЕ ПРОГРАМУВАННЯ ТА ОС.doc
Скачиваний:
9
Добавлен:
28.10.2018
Размер:
503.3 Кб
Скачать
  1. Регулярні вирази та граматики. Синтаксичні діаграми.

Регулярні вирази — це стандартна мова для задання зразків пошуку.

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

Регулярні події та вислови — події, представимі в скінченних автоматах, і відповідні вислови спеціальніою алгебраїчніою мовою (регулярна мова), яка задає ці події.

Синтаксис регулярних висловів

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

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

Кожний метасимвол з особливим значенням мусить екрануватись попереду символом зворотної похилої риски.

Після регулярного вислову можна вказати один чи декілька операторів повтору (метасимволів):

.

Відповідає будь-якому символу.

?

Попередній вислів є необов'язковим і може збігтися максимум один раз.

*

Попередній вислів повинен збігтися нуль чи більше разів.

+

Попередній вислів повинен збігтись один чи більше разів.

{N}

Попередній вислів повинен збігтися рівно N разів.

{N,}

Попередній вислів повинен збігтися N чи більше разів.

{N,M}

Попередній вислів повинен збігтися не менш ніж N, однак не більше за М разів.

-

Якщо цей символ знаходиться не на початку й не в кінці списку чи інтервалу у списку, задає інтервал.

^

Відповідає початку рядка, при цьому не потребує символу. Якщо стоїть на початку списку, інвертує його (відповідає символу, якого немає у списку).

$

Відповідає кінцю рядка.

\b

Відповідає межі слова.

\B

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

\<

Відповідає пустому рядку в початку слова.

\>

Відповідає пустому рядку в кінці слова.

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

Два регулярних вислови можна з'єднати інфіксним оператором «|»; у цьому разі складний вислів буде відповідатиме рядкам, що відповідають або першому, або другому простому регулярному вислову.

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

Синтаксичні діаграми Мова форм Бекуса-Наура – не єдина метамова для описання структури конструкцій мов програмування. Досить поширеною є також метамова синтаксичних діаграм. В основі цієї метамови також лежать нетермінальні й термінальні символи. Але тут вони записуються у прямокутниках та колах (овалах) відповідно. Наприклад, нетермінали <A> та <оператор> позначаються так: Відповідно термінальні символи '(' таelse мають вигляд Порядок символів у метавиразах задається стрілками, наприклад: Альтернативні метавирази задаються розгалуженням стрілок. Наприклад, якщо E1, E2 – метавирази, то E1 | E2 має такий вигляд: Можливість присутності або відсутності якоїсь частини виразу задається аналогічно, тільки одна з альтернатив порожня. Наприклад, структура операторів розгалуження задається так: Фігурним дужкам {E}, які задають повторення, відповідає повернення стрілки на початок діаграми, відповідної E. Наприклад, структура непорожньої послідовності операторів задається метавиразом <оператор> { ';' <оператор>}, якому відповідає діаграма Нарешті, поняття, вказане у БНФ ліворуч від знака "::=" нетерміналом, наприклад, A, записується також ліворуч від діаграми: