1. Положим множество V={S} и i=1.

2. Положим множество Vi = Vi-1{A  P и A  Vi-1 }.

3. Если Vi  Vi-1, то i=i=1 и перейти к шагу 2. В противном случае

N’= N  Vi , T’=TVi. Искомое множество продукций Р’ состоит

из множества продукций Р, содержащих символы из множества Vi


АЛГОРИТМ УСТРАНЕНИЯ БЕСПОЛЕЗНЫХ СИМВОЛОВ.


Пусть дана КС-грамматика G={N,T,P,S}. Построим эквивалентную грамматику G’={N’, T’, P’, S} без бесполезных символов. Метод состоит в следующем:

1. Положим N0=, i=1.

2. Положим множество Ni=Ni-1{A | A, i-1)}.

3. Если NiNi-1, положим i=i+1 и перейти к шагу 2. В противном случае положим N0=Ni.

4. Положим G1={N0 N,T,P’,S}, где P’P состоит из продукций множества Р, содержащих символы из N0.

5. Применив к G1 алгоритм устранения в грамматике недостижимых символов, получим G’={N’, T’, P’, S}.


АЛГОРИТМ ПРЕОБРАЗОВАНИЯ ГРАММАТИКИ В

ГРАММАТИКУ БЕЗ -ПРОДУКЦИЙ.


Пусть дана КС-грамматика G={N,T,P,S}. Построим -свободную грамматику G’, эквивалентную грамматике G. Метод состоит в следующем.

1. Применяем шаги 1-3 алгоритма устранения бесполезных символов, определяем множество N0={ A | A, A}.

2. Множество P’ строим следующим образом. Если продукция A0B11B22...Bkk , где k   и Bi 0, но ни один символ в цепочках j (0 j  k) не принадлежит N0, добавим к Р’ продукции вида A01122...kk, где Xi есть или Bi или , не включая в P’ продукцию A.

Если S0, то включим в P’ продукцию вида S’ | S, где S’ новый нетерминальный символ и положим N’=NS’, в противном случае N’=N, S’=S.

3. Положим G’={N’,T’, P’, S’}.


АЛГОРИТМ УСТРАНЕНИЯ ЦЕПНЫХ ПРОДУКЦИЙ.


Пусть нам дана -свободная КС-грамматика G={N,T,P,S}. Получим эквивалентную КС-грамматику G’={N’, T’, P’, S’} свободную от цепных и -продукций.

Метод состоит в следующем.

1. Для каждого A построим множество NA={B | A} нетерминальных символов, выводимых из А следующим образом:

1.1. Положим N0={A} и i=1;

1.2. Положим Ni={C | BC и Вi-1}  i-1;

1.3. Если Ni  i-1, то положим i=i+1 и повторим шаг 1.2. В противном случае положим NA=N.

2. Построим множество P’: если (В) и не является цепной продукцией, то включим в P’ продукцию A, для всех таких А, что ВА.

3. Положим G={N, T, P’,S}.

Данный алгоритм позволяет устранить из грамматики и циклы, т.е. выводы А*, где А.


УСТРАНЕНИЕ В КС-ГРАММАТИКЕ ЛЕВОЙ РЕКУРСИИ.


Алгоритмы синтаксического анализа легче строить тогда, когда КС-грамматика G не обладает свойствами леворекурсивности, т.е. в ней нет продукций вида X. Это особенно важно при использовании методов разбора сверху вниз и слева направо. Выбор продукции из множества альтернативных в этих методах базируется на сравнении порождённого крайнего левого символа промежуточной цепочки с текущим символом входной терминальной цепочки. При появлении же в выводе левой рекурсии произойдёт зацикливание. Поэтому при использовании алгоритмов нисходящего разбора левую рекурсию необходимо удалить.

В общем случае левая рекурсия в КС-грамматике может быть явной, когда есть продукции вида A или неявной- когда в грамматике есть взаимно рекурсивные продукции вида:


A|...


B|...


Устранение леворекурсивных правил. Пусть G КС-грамматика, в которой есть леворекурсивные правила. Эквивалентная грамматика G’ получается путём замены множества леворекурсивных правил грамматики G на множество правил вида:


A1’|2’| ... |n’


A’1’|2’| ... |n|


Здесь А’- новый вспомогательный нетерминальный символ.


ДЕТЕРМИНИРОВАННЫЙ СИНТАКСИЧЕСКИЙ АНАЛИЗ

СВЕРХУ ВНИЗ


В данном синтаксическом анализе используются LL(1) грамматики, которые являются обобщением S-грамматик.

КС-грамматика называется S-грамматикой, если выполняются условия:

-правая часть каждой продукции начинается терминальным символом;

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

Для заданной S-грамматики магазинный автомат ( МП-распознаватель) с одним состоянием задаётся следующим образом:

1. А=Т{|-}

2. Г=N{t | t и (Аt)}{}.

3. Q={q}.

4. z0={#S | S- аксиома}.

5. q0=q.

6. Каждой продукции КС-грамматики сопоставляется элемент управляющей таблицы МП-распознавателя. Если продукция имеет вид At, где A и t, а {}, то этому правилу в строке А и в столбце t будут соответствовать операции


ЗАМЕНИТЬ (r), СДВИГ

где r - цепочка , записанная в обратном порядке для того, чтобы удовлетворить соглашения «верхний символ справа».

Если продукция имеет вид Аt, то строке А и столбцу t соответствуют операции


ЧТЕНИЕ, СДВИГ.


Если магазинным символом является терминал b, то элементом таблицы в строке b будет


ЧТЕНИЕ, СДВИГ.


Элементом таблицы, который находится в строке маркера дна магазина # и концевого маркера |-, является


ДОПУСТИТЬ.


Все остальные элементы таблицы заполняются операцией


ОТВЕРГНУТЬ.


где: А- символы, записанные на входной ленте;

Г- символы, записанные в магазинную память;

Q- множество состояний автомата;

z0- начальная запись в магазин;

q0-начальное состояние автомата.


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

Определим ПЕРВ() как множество терминальных символов, которые являются первыми символами цепочек, выводимых из .

Цепочка  называется аннулирующей, если .

Продукция грамматики вида А также называется аннулирующим.


ВЫБОР (А)= ПЕРВ(),


если  - не аннулирующая, и


ВЫБОР(А)=ПЕРВ()СЛЕД(А),

если - аннулирующая цепочка. При этом СЛЕД(А) - множество следующих за А терминалов в промежуточной цепочке, выводимой из S|-, где S-аксиома грамматики.

Для того, чтобы КС-грамматика была типа LL(1), необходимо, чтобы множества выбора для правил с одинаковыми левыми частями не пересекались, т.е. не имели общих терминальных символов.

Если для вашей грамматики это так, то она будет относится к типу LL(1) и для неё автомат строится по следующему правилу.


ПРАВИЛА ОПРЕДЕЛЕНИЯ ДЕТЕРМИНИРОВАННОГО

МП-РАСПОЗНАВАТЕЛЯ ПО LL(1) ГРАММАТИКЕ.


Для заданной LL(1) грамматики МП-распознаватель задаётся следующим образом:

1. А=Т{|-};

2. Г=N{t | t и (Аt), , {}}{};

3. Q={q};

4. z0={#S};

5. q0=q;

6. Управление описывается управляющей таблицей с одним состоянием, строки помечены магазинными символами из Г, столбцы - входными символами из А. Элемент таблицы создаётся для каждой продукции. Если продукция имеет вид Аt, то этому правилу в строке А и столбце t будут соответствовать операции


ЗАМЕНИТЬ(r), СДВИГ,


где r - цепочка , записанная в обратном порядке для того, чтобы удовлетворить соглашению «верхний символ справа»

Если продукция имеет вид А, где =Х и Х, {}*, то ему в строке А и во всех столбцах, принадлежащих множеству ВЫБОР (А), будет соответствовать переход


ЗАМЕНИТЬ (r), ДЕРЖАТЬ.


Когда =, вместо ЗАМЕНИТЬ() можно использовать ЧТЕНИЕ.

Если продукция имеет вид Аt, то ей в строке А и в столбце t соответствует операция


ЧТЕНИЕ. СДВИГ.

7. Если магазинным символом является терминал b, то элементом таблицы в строке b будет

ЧТЕНИЕ. СДВИГ.

8. Элементом таблицы, который находится в строке маркера дна # и столбце концевого маркера |-, является


ДОПУСТИТЬ.

9. Все остальные элементы таблицы заполняются операцией


ОТВЕРГНУТЬ.


5. Содержание отчёта.

Отчёт составляется каждым студентом и содержит развёрнутые ответы на все пункты задания. К отчёту прилагается таблица переходов МП-распознавателя и работающая программа МП-распознавателя.


6. Контрольные вопросы.

1. Как определяется КС-грамматика?

2. Как определяется нормальная форма Хомского?

3. Как задаётся нормальная форма Грейбах?

4. Как исключить -продукции?

5. Как устранить недосигаемые символы?

6. Как устранить бесполезные символы?

7. Как устраняются циклические связи в продукциях?

8. Как устранить левые рекурсии в грамматике?

9. Как определяется магазинный автомат?

10. Как определяется LL(1) грамматика?

11. Как определяется S-грамматика?


Литература.

1. Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Основы построения трансляторов. -СПб.: КОРОНА принт, 2000. -256 с.

2. Хантер Р. Проектирование и конструирование компиляторов. М.: Финансы и статистика. 1984 г.

3. Грис Д. Конструирование компиляторов для цифровых вычислительных машин. М.: Мир,1975 г.


Информация о работе «Лабораторные работы по Теории вычислительных процессов и структур»
Раздел: Информатика, программирование
Количество знаков с пробелами: 42177
Количество таблиц: 10
Количество изображений: 1

Похожие работы

Скачать
79120
0
14

... процессом init (процесс, идентификатор которого pid = 1, становится их новым родителем). Порядок выполнения работы 1. Изучить теоретическую часть лабораторной работы. 2. Организовать функционирование процессов следующей структуры: 2.1. Отец формирует нумерованные сообщения вида: N pid time (N –текущий номер сообщения, pid – pid процесса, time – время записи в формате мм.сс (минуты. ...

Скачать
78723
14
38

... работы со справочной системой работа практикума приостанавливается. 3.   Организационно-экономическое обоснование проекта В ходе дипломного проекта был разработан компьютерный лабораторный практикум по курсу «Теория оптимизации и численные методы». В данном разделе рассмотрена экономическая сторона проекта. Рассмотрены следующие вопросы: 1)         сетевая модель 2)         расчёт ...

Скачать
114601
5
73

... концентрических окружностей с уменьшающимся радиусом по мере затухания колебаний скорости и момента. Аналогичная картина наблюдается при ступенчатом набросе нагрузки. 5. РАЗРАБОТКА ВИРТУАЛЬНОЙ ЛАБОРАТОРНОЙ РАБОТЫ НА БАЗЕ ВИРТУАЛЬНОЙ АСИНХРОННОЙ МАШИНЫ   Иную возможность анализа АД представляет специализированный раздел по электротехнике Toolbox Power System Block. В его библиотеке имеются блоки ...

Скачать
54439
17
0

... гистерезисная диаграмма поляризации сегнетоэлектрика. Подобрать масштаб по вертикальной оси осциллографа так, чтобы изображение занимало весь экран. Внимание: в процессе выполнения последующих пунктов лабораторной работы не допускается изменять положение масштабного переключателя осциллографа. Измерить и записать в табл. 6.2 координаты вершины гистерезисного цикла: xm, ym (координаты вершины ...

0 комментариев


Наверх