Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование отношений приоритетов операторов




Цель отношений приоритетов состоит в определении границ основы правосентенциальной формы: <• отмечает ее левый конец, •> — правый, а находится внутри основы. Предположим, что есть правосентенциальная форма операторной грамматики. Из того, что у продукции не может быть двух смежных нетерминалов в правой части, следует, что и правосентенциальная форма не может иметь двух смежных нетерминалов. Таким образом, правосентенциальную форму можно записать в виде β0 a 1β1... a nβn, где каждое β является либо пустой строкой, либо одиночным нетерминалом, а каждое а, представляет собой одиночный терминал.

Предположим, что между а i и а i+1 выполняется ровно одно отношение — •>, <•, . Используем для маркировки концов строки символ $ и определим, что $<• b и b для всех терминалов b. Теперь предположим, что из строки удалили нетерминалы и поместили одно из отношений •>, <• или между каждой парой терминалов и между крайними терминалами и маркерами $. В правосентенциальная форме id + id * id отношения приоритетов показаны в таблице рис. 33 (эти отношения выбраны при рассмотрении грамматики из примера 22).

  Id + * $
id   •> •> •>
+ <• •> <• •>
* <• •> •> •>
$ <• <• <•  

 

Рис. 33. Отношения приоритетов операторов

 

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

$ <• id •> + <• id •> * <• id •> $ (7.1)

Например, <• вставлен между крайним слева $ и id, поскольку в ячейке в строке и столбце id находится отношение <•. Основа может быть найдена следующим образом:

1. Сканируем строку слева направо, пока не встретим первый символ •>. В (7.1): символ располагается между первым id и +.

2. Затем сканируем строку в обратном направлении (влево), пропуская все , пока не встретим <•. В (7.1) сканирование идет до символа $.

3. Основа содержит все, что находится слева от первого •> и справа от <•, найденного на шаге (2), включая все промежуточные и окружающие нетерминалы (включение окружающих нетерминалов необходимо для того, чтобы в правосентенциальной форме не появлялись два смежных нетерминала). В (7.1) основой является первый id.

Работая с грамматикой (7.1) свертываем id в E, в результате чего получаем правовосентенциальную форму E+ id * id. После свертки двух оставшихся id в E получаем правосентенциальную форму E+E*E. Следующая строка $+*$ получена удалением нетерминалов. Вставка отношений приоритетов дает строку $<•+<• * •>$, из которой ясно, что левый конец основы находится между + и *, а правый — между * и $. Эти отношения приоритетов указывают, что в правосентенциальной форме E+E*E основой является E*E. Окружающие * нетерминалы E также являются частью основы.

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

Если меж­ду терминалом на вершине стека и очередным входным символом выполняется отноше­ние <• или , то синтаксический анализатор выполняет перенос (это означает, что пра­вый конец основы еще не найден). Если отношение — •>, то выполняется свертка. В этот момент синтаксический анализатор обнаружил правый конец основы, и для поиска ее левого конца в стеке можно воспользоваться отношениями приоритета.

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

 




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 565; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.