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

Грамматики операторного предшествования

Операторной грамматикой называется КС-грамматика без λ-правил, в которой правые части всех правил не содержат смежных нетерминальных символов. Для операторной грамматики отношения предшествования можно задать на множестве терминальных символов (включая символы JLH и 1К).

Грамматикой операторного предшествования называется операторная КС-грамматика G(VN,VT,P,S), V = VTuVN, для которой выполняются следующие условия:

2. Различные порождающие правила имеют разные правые части, λ-правила отсутствуют.

Отношения предшествования для грамматик операторного предшествования определены таким образом, что для них выполняется еще одна особенность — правила грамматики операторного предшествования не могут содержать двух смежных нетерминальных символов в правой части. То есть в грамматике операторного предшествования G(VN,VT,P,S), V = VTuVN не может быть ни одного правила вида: А->хВСу, где A,B,CeVN, x,yeV* (здесь х и у - это произвольные цепочки символов, могут быть и пустыми).

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

--- всякая грамматика операторного предшествования задает детерминированный КС-язык (но не всякая грамматика операторного предшествования при этом является однозначной!);

--- легко проверить, является или нет произвольная КС-грамматика грамматикой операторного предшествования (точно так же, как и для простого предшествования).

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

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

1 В литературе отношения операторного предшествования иногда обозначают другими символами, отличными от «<•», «•>» и «=•», чтобы не путать их с отношениями простого предшествования. Например, встречаются обозначения «<°», «°>» и «=°». В данном пособии путаница исключена, поэтому будут использоваться одни и те же обозначения, хотя, по сути, отношения предшествования несколько различны.

Для грамматики данного вида на основе установленных отношений предшествования также строится матрица предшествования, но она содержит только терминальные символы грамматики.

Для построения этой матрицы удобно ввести множества крайних левых и крайних правых терминальных символов относительно нетерминального символа

Тогда определения отношений операторного предшествования будут выглядеть так:

В данных определениях цепочки символов x,y,z могут быть и пустыми цепочками. Для нахождения множеств L'(A) и R'(A) предварительно необходимо выполнить построение множеств L(A) и R(A), как это было рассмотрено ранее. Далее для построения L'(A) и R'(A) используется следующий алгоритм:

Для каждого нетерминального символа А ищем все правила, содержащие А в левой части. Во множество ЦА) включаем самый левый терминальный символ из правой части правил, игнорируя нетерминальные символы, а во множество R(A) — самый крайний правый терминальный символ из правой части правил. Переходим к шагу 2.

Для каждого нетерминального символа А: если множество L(А) содержит нетерминальные символы грамматики А', А", .... то его надо дополнить символами, входящими в соответствующие множества ЬС(А'), Ь*(А"), ... и не входящими в LC(A). Ту же операцию надо выполнить для множеств R(A) и Rr(A). Шаг 3. Если 3 AeVN: R'j(A) Ф RVi(A) или L(А) Ф Ь1И(А), то i:=i+l и вернуться к шагу 2, иначе построение закончено: R(A) = Rfi(A) и L(A) - Ь1((А). Если на предыдущем шаге хотя бы одно множество L'(A) или RC(A) для некоторого символа грамматики изменилось, то надо вернуться к шагу 2, иначе построение закончено.

Для практического использования матрицу предшествования дополняют символами 1„ и 1К (начало и конец цепочки). Для них определены следующие отношения предшествования:

Здесь S — целевой символ грамматики.

Матрица предшествования служит основой для работы распознавателя языка, заданного грамматикой операторного предшествования. Поскольку она содержит только терминальные символы, то, следовательно, будет иметь меньший размер, чем аналогичная матрица для грамматики простого предшествования. Следует отметить, что напрямую сравнивать матрицы двух грамматик нельзя — не всякая грамматика простого предшествования является грамматикой операторного предшествования, и наоборот. Например, рассмотренная далее в примере грамматика операторного предшествования не является грамматикой простого предшествования (читатели могут это проверить самостоятельно). Однако если две грамматики эквивалентны и задают один и тот же язык, то их множества терминальных символов должны совпадать. Тогда можно утверждать, что размер матрицы для грамматики операторного предшествования всегда будет меньше, чем размер матрицы эквивалентной ей грамматики простого предшествования.

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

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