КАТЕГОРИИ: Архитектура-(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) |
Порождение
Пример 10 Используя приведенные соглашения, можно записать грамматику из примера 5.2 в следующем виде: E->E A E | (E) | -E | id A-> +| - | * | / | Из соглашений следует, что E и А — нетерминалы, причем E является стартовым символом. Остальные символы представляют собой терминалы. Существует несколько способов рассматривать процесс определения языка грамматикой: один - процесс построения деревьев разбора, другой способ, который дает точное описание нисходящего построения дерева разбора – порождение. Основная идея состоит в том, что продукция рассматривается как переписывающее правило, в котором нетерминал из левой части замещается строкой из правой части продукции. Рассмотрим, например, следующую грамматику арифметических выражений. E->E+E | E*E | (E) | -E | id (5.3) Продукция E-> -E означает, что выражение, которому предшествует знак минуса, также является выражением. Эта продукция может использоваться для порождения более сложных выражений из простых, позволяя заменять любой экземпляр E на –E. В простейшем случае можно заместить одно E на -E и описать это как Е=> -E. Такая запись читается, как "E порождает -E", или "из E выводится -E". Продукция E—>(E) говорит, что можно также заменить один экземпляр E в любой строке грамматики на (E), например E*E=>(E)*E или E*E=>E*(E). Можно взять нетерминал E и неоднократно применять продукции в произвольном порядке для получения последовательности замещений, например, E => -E => -(E) => -(id). Такая последовательность замен представляет порождение (id) из E. (Символ => означает "порождает за один шаг". Символ =*> означает "порождает за нуль или более шагов". Символ =+> используется для обозначения "порождает за один или более шагов".) Предложение языка L(G), порождаемого грамматикой G, представляет собой сентенциальную форму без нетерминалов. Например, строка -(id+id) является предложением грамматики (5.3) так как существует следующее порождение Е => -E=> -(E) => -(Е + Е)=> -(id + Е) => -(id + id) (5.4) Строки Е, -E, -(E),..., -(id+id), появляющиеся в процессе порождения, представляют собой сентенциальные формы данной грамматики. Для указания того, что -(id+id) может быть выведено из E, можно записать E=*>-(id + id). На каждом шаге порождения осуществляется два выбора — во-первых, выбор заменяемого нетерминала, во-вторых, его альтернативы. Например, порождение (5.4) из примера 11 может продолжиться после -(E+E) следующим образом: -(E+E) => -(E+id) => -(id+id) (5.5) Каждый нетерминал в (5.5) замещается той же правой частью, что и в (5.4), но в другом порядке.
Дата добавления: 2014-12-27; Просмотров: 828; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |