Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по япмт.docx
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
3.94 Mб
Скачать

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

Грамматика называется обратимой, если в ней нет двух правил с одинаковыми правыми частями. Грамматика называется приведенной, если в ней нет e-правил, бесполезных символов и циклов. Зададимся целью ввести на множестве терминальных и нетерминальных символов три отношения ("отношения предшествования"), будем обозначать их <, = и >.

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

  Si = Sj ( Si,SjV), если и только если правило UxSiSjy P, где UVN, x,yV*;

  Si < Sj ( Si,SjV), если и только если правило UxSiDy P и вывод D*Sjz, где U,DVN, x,y,zV*;

   Si > Sj ( Si,SjV) , если и только если правило UxCSjy P и вывод C*zSi или правило UxCDy P и выводы C*zSi и D*Sjw, где U,C,DVN, x,y,z,wV*.

Для реализации этой грамматики необходимы:

1. Стек интерпретации – хранит только операнды и результаты промежуточных операций над операндами.

2. Стек разбора – необходим для того чтобы отложить выдачу в блок интерпретации очередного действия пока не будет выполнено более приорететное.

Рассмотрим выражение вида (a+a*a), где ) – всегда окончание ввода. Построим таблицу предшествования:

a

+

*

(

)

a

>

>

+

<

>

*

>

(

<

<

удал.

)

ош.

ош.

ош.

ош.

ош.

Грамматики операторного предшествованияЕсли в правилах приведенной обратимой грамматики не встречаются рядом два нетерминала, говорят, что грамматика является операторной. Классический пример - грамматика арифметических формул. Для таких грамматик можно вычислять отношения предшествования только на множестве терминальных символов.

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

Отношения предшествования для грамматики операторного предшествования G(VN,VT,P,S) задаются следующим образом:

    a = b, если и только если существует правило Uxaby P или правило UxaCby, где a,bVT, U,CVN, x,yV*;

a < b, если и только если существует правило UxaCy P и вывод C*bz или вывод C*Dbz, где a,bVT, U,C,DVN, x,y,zV*;

      a > b, если и только если существует правило UxCby P и вывод C*za или вывод C*zaD, где a,bVT, U,C,DVN, x,y,zV*.

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