Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_YaPiMT_ispravlennoe.docx
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
272.13 Кб
Скачать

Отношения предшествования

Вспомним восходящий разбор. При применении любых из методов восходящего разбора возникает вопрос, как найти основу и выяснить, к какому нетерминалу нужно её приводить Мы рассмотрим этот вопрос для определённого класса грамматик называемых грамматиками простого предшествования ( грамматики класса 2 по Холмскому или LL1 грамматики).

Как же найти основу, если задача сентенциальная форма x? Хотелось бы, двигаясь слева направо и по любым только двум соседних символам, одновременно суметь определить: нашли ли мы хвост основы. А затем, двигаясь назад к левому концу сентенциальной формы, найти голову основы, опять принимая каждый раз решение только по двум соседним символам.

Пусть U, C, D - нетерминальные символы, x, y, z, w – любые цепочки, возможно пустые.

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

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

А) Si Sj, если и только есть существует правило U -> xSiSjy

Б) Si Sj, если и только есть правило U->xSiDy и вывод D=>*Sjz.

В) Si Sj, если и только есть правило U->x c Sjy и вывод С=>*zSi или правило U ->x c Dy и выводы С=>*zSi; D=>*Sjw.

Заметим, что между любыми двумя (2) соседними символами Si и Sj приводимой строки могут существовать лишь 3 отношения:

Si Si, если символ Si – самый левый символ некоторой основы Si Sj

Si- основа

Si Si+1, если символ Si - самый правый символ основы …Si Si+1. (…Si - основа)

S+ Si+1, если символы Si и Si+1 принадлежат одной основе … SiSi+1… - основа

Отношения предшествования зависят от порядка, в котором стоят символы и из Si Sj не следует Sj Si.

  1. Разные порождающие правила имеют различные правые части.

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

Распознаватель

Основная идея алгоритма разбора следующая. Символы входной строки поочерёдно переписываются в стек до тех пор, пока между символами в вершине стека, обозначим его Sl- и очерёдным символом входной строки – Si- не появится отношение , т.е. Sl Si

Тогда стек просматривается в направлении от вершины к началу до тех пор пока, между двумя очередными символами Sk-1 и Sk не появится отношение Sk-1 Sk. Часть стека от символа Sk до символа в вершине Sl - основа. Теперь среди порождающих правил отыскивается правило вида: U->SkSl u , если нужно, вызывается семантическая подпрограмма, которая обрабатывает сроку Sk…Sl, переводя её на промежуточный или входной язык. После этого в стеке строка Sk…Sl заменяется символом U, и описанный выше процесс заполнения стека символами входной цепочки продолжается.

U

вершина стека

Sk-1

Si

Si+1

……

Sn

Если на некотором шаге процесса обнаруживается, что между соседними символами Sp и Sq отношения предшествования, то это свидетельствует об ошибке типа « символы Sp и Sq не могут не могут находиться рядом». Соответствующая информация заносится в таблицу ошибок.

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