Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Алгоритм построения множества FIRST





 

Прежде всего, определим множество FIRST для всех символов грамматики:

1) если X – терминал, то FIRST (X) = X

2) для правила X→ε добавим ε к множеству FIRST (X)

3) если X – нетерминал и X → Y1Y2 … Yk – правило грамматики, то добавим терминал а в FIRST (X), если для некоторого i этот терминал a принадлежит FIRST (Yi) и ε принадлежит всем множествам FIRST (Y1), …, FIRST (Yi-1), то есть Y1, …, Yi-1 =>*ε. Если ε принадлежит FIRST (Yj) для всех j =1, 2, …, k, то добавим ε в FIRST (Y).

 

Теперь сформулируем сам алгоритм построения множества FIRST(w).

Вход. КС-грамматика G=(N, T, P, S) и цепочка w терминальных и нетерминальных символов.

Выход. FIRST (w).

Метод. Добавим в FIRST (X1X2…Xk) все непустые символы из FIRST (X1). Затем, если ε принадлежит FIRST (X1), то добавим все непустые символы из FIRST (X2), и так далее. Наконец, если для всех j FIRST (Xj) содержит пустой символ, то мы добавим ε в множество FIRST (X1X2…Xk).

 

Пример. Рассмотрим грамматику с правилами:

S → B A

A → +B A

A → ε

B → D C

C → * D C

C → ε

D → (S)

D → a

 

Для этой грамматики множества FIRST определяются следующим образом:

FIRST (D) = {(, a}, FIRST (C) = {*, ε }, FIRST (B) = FIRST (D), FIRST (A)={+, ε },

FIRST (S) = {(, a}

LL(k)-грамматика

Определение. Грамматика G = (VT, VN, P, S) называется LL(k)-грамматикой, если для любых двух левых выводов

S =>* wAv => wuv =>* wx

S =>* wAv => wu1v =>* wy,

для которых FIRSTk (x) = FIRSTk (y) верно, что u=u1.

 

То есть если для данной цепочки wAv, состоящей из терминальных и нетерминальных символов и k первых символов (если они есть), выводящихся из Av, существует не более одного правила, которое можно применить к A, чтобы получить вывод какой-нибудь терминальной цепочки, начинающейся с w и продолжающейся упомянутыми k терминалами.

 

Пример. Рассмотрим грамматику с правилами:

S → aAS

S → b

A → a

A → bSA

и два вывода

(1) S =>* wSv => wuv =>* wx

(2) S =>* wSv => wu1v =>* wy

 

Пусть цепочки x и y начинаются с a. Это означает, что в выводе участвовало правило S→aAS. Следовательно, u = u1 = aAS. Пусть цепочки x и y начинаются с b. Это означает, что в выводе участвовало правило S→b. Следовательно, u = u1 = b.

 

Для выводов

(3) S =>* wAv => wuv =>* wx

(4) S =>* wAv => wu1v =>* wy

рассуждение аналогично. Таким образом, грамматика обладает свойством LL(1).

 

Для LL(1)-грамматик может быть построен анализатор методом рекурсивного спуска без возвратов.

Date: 2016-05-25; view: 1146; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию