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

3.4.Контроль

На данном этапе изучения материала учащимся предлагаются вопросы и задачи для самоконтроля, например:

  1. Раскройте скобки и упростите выражение в выражении с цепочками символов .

  2. Как обозначается множество всех цепочек над алфавитом V, включая ?

  3. Что такое лексика формального языка?

  4. Математически определите каждый класс формальных грамматик и сконструируйте пример грамматики для каждого класса.

  5. Постройте грамматику, описывающую поезд (на базе 2-х терминальных символов <локомотив> и <вагон>):

- все локомотивы должны быть сосредоточены в начале поезда;

- поезд начинается и заканчивается локомотивом;

- поезд не должен содержать 2 локомотива или 2 и вагона подряд.

  1. Согласно условию 5 постройте грамматику с использованием метасимволов языка описания регулярных выражений для описания поезда, содержащего не более 60 вагонов.

4.Модуль Распознаватели, механизм вывода цепочек символов

4.1.Цепочки вывода. Сентенциальная форма.

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

Цепочка β = 12 называется непосредственно выводимой из цепочки β = 12 в грамматике G(VT,VN,P,S), V = VTVN, 1, , 2  V*,   V+, если в граммати­ке G существует правило: →  Р.

Непосредственная выводимость цепочки β из цепочки α обозначается так: αβ. Иными словами, цепочка β выводима из цепочки α в том случае, если можно взять несколько символов в цепочке α, заме­нить их на другие символы согласно некоторому правилу грамматики и полу­чить цепочку β. В формальном определении непосредственной выводимости любая из цепочек 1 или 2 (а равно и обе эти цепочки) может быть пустой. В предельном случае вся цепочка α может быть заменена на цепочку β, тогда в грамматике G должно существовать правило: α→β  Р.

Цепочка β называется выводимой из цепочки α (обозначается α*β) в том слу­чае, если выполняется одно из двух условий:

β непосредственно выводима из α (αβ);

 , такая, что: у выводима из α и β непосредственно выводима из  (α* и β).

Это рекурсивное определение выводимости цепочки. Суть его заключается в том, что цепочка β выводима из цепочки α, если αβ или же если можно построить последовательность непосредственно выводимых цепочек от α к β следующего вида: α1…i…nβ, n≥1 этой последовательности каждая последую­щая цепочка , непосредственно выводима из предыдущей цепочки i-1.

Такая последовательность непосредственно выводимых цепочек называется вы­водом или цепочкой вывода. Каждый переход от одной непосредственно выводи­мой цепочки к следующей в цепочке вывода называется шагом вывода. Очевидно, что шагов вывода в цепочке вывода всегда на один больше, чем промежуточных цепочек. Если цепочка р непосредственно выводима из цепочки α: αβ, то име­ется всего один шаг вывода.

Если цепочка вывода из α к β содержит одну или более промежуточных цепочек (два или более шагов вывода), то она имеет специальное обозначение α+β (го­ворят, что цепочка β нетривиально выводима из цепочки α). Если количество шагов вывода известно, то его можно указать непосредственно у знака выводи­мости цепочек. Например, запись α4β означает, что цепочка β выводится из це­почки а за 4 шага вывода1.

Возьмем в качестве примера ту же грамматику для целых десятичных чисел со знаком G({0,1,2,3,4,5,6,7,8,9,-,+},{S,Т,F},P,S):

Р:

S → Т | +Т | -Т

Т → F | TF

F → 0 | l | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Построим в ней несколько произвольных цепочек вывода:

1. S  -Т  -TF  -TFF  -FFF  -4FF  -47F  -479

2. S  Т  TF  Т8  F8  18

3. Т  TF  ТО  TFO  Т50  F50  350

4. TFT  TFFT  TFFF  FFFF  1FFF  1FF4  10F4  1004

5. F  5

Получили следующие выводы:

1. S  * -479 или S  + -479 или S  7 -479

2. S  * 18 или S  + 18 или S  5 18

3. Т  * 350 или Т  + 350 или Т  б 350

4. TFT  * 1004 или TFT  + 1004 или TFT  7 1004

5. F  * 5 или F ' 5 (утверждение F  + 5 неверно!)

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

Возьмем в качестве второго примера грамматику G3({a,b,c},{B,C,D,S},P,S) с пра­вилами Р, которая уже рассматривалась выше:

S → BD

В → аВbС | ab

Сb → bС

CD → Dc

bDc → bcc

abD → abc

Как было сказано ранее, она задает язык L(G3) = {0n ln | n > 0}. Рассмотрим при­мер вывода предложения «aaaabbbbcccc » языка L(G3) на основе грамматики G3: S  BD  aBbCD  aaBbCbCD  аааВbСbСbСD  aaaabbCbCbCD  aaaabbbCCbCD  aaaabbbCbCCD  aaaabbbbCCCD  aaaabbbbCCDc  aaaabbbbCDcc  aaaabbbbDccc  aaaabbbbcccc. Тогда для грамматики G3 получаем вывод: S  * aaaabbbbcccc.

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