Главная страница Случайная лекция Мы поможем в написании ваших работ! Порталы: БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика Мы поможем в написании ваших работ! |
Генерация ОПС для присваиваний и арифметических выражений с индексами
Вначале надо расширить грамматику арифметических выражений так, чтобы из начального нетерминала порождалось присваивание, и чтобы операндами могли быть индексируемые элементы массивов.
Пример 14. Грамматика присваиваний и арифметических выражений с индексами для одно- и двумерных массивов (A – начальный нетерминал) будет такой: A → aH := S S → S + T | T T → T * F | F F → (S) | aH H → [S] | [S, S] | λ
Последняя группа порождающих правил (для нетерминала H) вносит неопределенность: две различные правые части начинаются с одного и того же терминального символа. Поэтому заменим эту группу правил на следующие правила, добавив в грамматику новый нетерминал:
H → [SK | λ K → ] | , S]
После этого в грамматике устраним левую рекурсию и преобразуем ее к обобщенной нормальной форме Грейбах, в результате получим правила:
A → aH := S S → (S)VU | aHVU U → + TU | λ T → (S)V | aHV V → * FV | λ F → (S) | aH H → [SK | λ K → ] | , S]
В табл. 17 представлен построенный по этим правилам LL(1)-анализатор, дополненный семантическими действиями для генерации ОПС. При этом правая часть правила A → aH := S в конце дополнена пустым символом □ для того, чтобы знак операции := генерировался после ОПС для выражения в правой части присваивания.
Табл. 17
Пусть на вход анализатора поступает цепочка M[i] := a*L[i, j + d]. Шаги ее анализа и генерации ОПС представлены в табл. 18. Для сокращения таблицы из нее удалены некоторые шаги, при выполнении которых подряд удаляются из магазина несколько нетерминалов. Табл. 18
Конец примера.
Дата добавления: 2015-07-26; просмотров: 102; Нарушение авторских прав Мы поможем в написании ваших работ! |