Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava10 r.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
339.97 Кб
Скачать

Связь регулярных выражений и регулярных грамматик

Регулярные выражения и регулярные грамматики связаны между собой следующим образом:

--- для любого регулярного языка, заданного регулярным выражением, можно построить регулярную грамматику, определяющую тот же язык;

--- для любого регулярного языка, заданного регулярной грамматикой, можно получить регулярное выражение, определяющее тот же язык.

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

Построение леволинейной грамматики для языка, заданного регулярным выражением

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

1. Для регулярного выражения 0 построим леволинейную грамматику G(V, {S},0,S), которая будет определять язык, заданный этим выражением (грамматика, в которой нет ни одного правила).

2. Для регулярного выражения X. построим леволинейную грамматику G(V,{S}, {S-»X.},S), которая будет определять язык, заданный этим выражением.

3. Для регулярного выражения aeV построим леволинейную грамматику G(V, {S},{S-»a},S), которая будет определять язык, заданный этим выражением.

4. Имеем регулярные выражения а и β, заданные ими языки L1 и L2, а также соответствующие им леволинейные грамматики GjCV,VNi.Pi.Si) и G2(V,VN2, P2,S2): Li = L(G,) и L2 = L(G2). Необходимо на основе этих данных построить леволинейные грамматики для языков, заданных выражениями а+β(L3 = - L1 и L2), aβ.(L< = LtL2) и а* (L5 = L1*):

---для языка, заданного выражением а+β, строим грамматику G3(V,VN3,P3,S3): VN3 = VN1 u VN2 u {S3} (алфавит нетерминальных символов G3 строится на основе алфавитов нетерминальных символов G( и G2 с добавлением нового символа S3), Р3 – p1 u P2 u {S3-»S2|Sj} (множество правил G3 строится на основе множеств правил G, и G2 с добавлением двух новых правил S3->S2|S1), целевым символом грамматики G3 становится символ S3;

---для языка, заданного выражением aβ, строим грамматику G4(V,VN4,P4,S2): VN3 = VN1 u VN2 (алфавит нетерминальных символов G3 строится на основе алфавитов нетерминальных символов Gt и G2), множество правил Р4 строится на основе множеств правил pi и Р2 следующим образом:

все правила из множества Pt переносятся в Р4,

если правило из множества Р2 имеет вид А-»Ву, A,BeVN2) yeV*, то оно переносится в Р4 без изменений,

если правило из множества Р2 имеет вид А-»у, АеVN2, yeV*, то в Р4 добавляется правило A->S1y,

целевым символом грамматики G4 становится целевой символ грамматики G2 — S2;

---для языка, заданного выражением а*, строим грамматику G5(V,VN5,P5,S5): VN3 = VNt u {S5} (алфавит нетерминальных символов G3 строится на основе алфавита нетерминальных символов gj с добавлением нового символа S5), множество правил Р5 строится на основе множеств правил Р4 следующим образом:

если правило из множества pj имеет вид А-»Ву, A,BeVNt, yeV*, то оно переносится в ps без изменений,

если правило из множества Р4 имеет вид А-ху, AsVN2, yeV*, то в Р5 добавляются два правила A->Sjyly,

дополнительно в Р5 добавляются два новых правила Ss—^SjX,, целевым символом грамматики G3 становится символ S5.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]