КАТЕГОРИИ: Архитектура-(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) |
Множества first и follow
При построении предиктивного синтаксического анализатора необходимо построить два множества связанные с грамматикой G, — FIRST и FOLLOW, которые обеспечивают заполнение таблицы предиктивного анализа грамматики G. Если α — произвольная строка символов грамматики, то определим FIRST(a) как множество терминалов, с которых начинаются строки, выводимые из а. Если а λ, то λ входит в FIRST(a). FOLLOW(A) для нетерминала А определяется как множество терминалов а, которые могут располагаться непосредственно справа от А в некоторой сентенциальной форме, т.е. множество терминалов а, таких, что существуют порождения вида S αA aβ для некоторых α и β. В процессе приведения между А и а могут появиться символы, но они порождают λ и в конечном счете исчезают. Если А может оказаться крайним справа символом некоторой сентенциальной формы, то $ входит в FOLLOW(A). FIRST(X) для всех символов грамматики X вычисляетсяс применением следующих правил до тех пор, пока ни к одному из множеств FIRST не смогут быть добавлены ни терминалы, ни λ. 1. Если X — терминал, то FIRST(X)={ X }. 2. Если имеется продукция X → λ, добавим λ к FIRST(X). 3. Если X нетерминал и имеется продукция X → Y1Y2...Yk, то поместим а в FIRST(X), если для некоторого i а є FlRST(Yi) и λ входит во все множества FIRST(Y1)… FIRST(Yi-1), т.е. Y1 … Yi-1 λ. Если λ имеется во всех FIRST(Yi), i = l, k, то добавляем λ к FIRST(X). Например, все, что находится во множестве FIRST(Yi), есть и в множестве FIRST(X). Если Y1 не порождает λ, то больше мы ничего не добавляем к FIRST(X), но если Y1 λ, то к FIRST(X) добавляем FIRST(Y2) и т.д. FIRST для любой строки Х1Х2...Хn вычисляется следующим образом. Добавим к FIRST(Х1Х2...Хn) все не-λ символы из FIRST(X1). Добавим также все не λ- символы из FIRST(X2), если λ є FIRST(X1), все не λ - символы из FIRST(X3), если λ имеется как в FIRST(X1), так и в FIRST(X2) и т.д. И наконец, добавим λ к FIRST(Х1Х2...Хn), если для всех i FIRST(Xi) содержит λ. FOLLOW(A) для всех нетерминалов А вычисляется с применением следующих правил до тех пор, пока ни к одному множеству FOLLOW нельзя будет добавить ни одного символа. 1. Поместим $ в FOLLOW(S), где S — стартовый символ, а $ — правый ограничитель входного потока. 2. Если имеется продукция А → αBβ, то все элементы множества FIRST(β), кроме λ, помещаются в множество FOLLOW(B). 3. Если имеется продукция А → αB, или A → αBβ, где FIRST(β) содержит λ (т.е. β=> λ), то все элементы из множества FOLLOW(A) помещаются в множество FOLLOW(B) [3].
Дата добавления: 2014-12-27; Просмотров: 3690; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |