Алгоритм Эрли — различия между версиями
(→Алгоритм Эрли) |
Kirelagin (обсуждение | вклад) (→Определения) |
||
Строка 8: | Строка 8: | ||
|definition = | |definition = | ||
Пусть <tex>G = (N, \Sigma, P, S)</tex> {{---}} [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная]] грамматика и <tex>\omega = a_1 a_2 ... a_n</tex> {{---}} входная цепочка из <tex>\Sigma^*</tex>. | Пусть <tex>G = (N, \Sigma, P, S)</tex> {{---}} [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная]] грамматика и <tex>\omega = a_1 a_2 ... a_n</tex> {{---}} входная цепочка из <tex>\Sigma^*</tex>. | ||
− | Объект вида <tex>[A \rightarrow \alpha \cdot \beta, i]</tex | + | Объект вида <tex>[A \rightarrow \alpha \cdot \beta, i]</tex>, где <tex>A \rightarrow \alpha \beta </tex> — правило из <tex>P</tex> и <tex>0 \leqslant i \leqslant n</tex> — позиция в <tex>\omega</tex>, называется '''ситуацией''', относящейся к цепочке <tex>\omega</tex>. |
}} | }} | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | < | + | <tex>j</tex>-м '''списком ситуаций''' <tex>I_j</tex> для входной цепочки <tex>\omega = a_1 a_2 ... a_n</tex>, где <tex>0 \leqslant j \leqslant n</tex>, называется множество ситуаций <tex>\lbrace [A \rightarrow \alpha \cdot \beta , i] \mid \alpha \Rightarrow^* a_{i+1} ... a_j; \exists \gamma, \delta : S \Rightarrow^* \gamma A \delta, \gamma \Rightarrow^* a_1...a_i \rbrace</tex>. То есть <tex>\gamma \alpha </tex> выводит часть <tex>\omega</tex> c первого по <tex>j</tex>-й символ. |
}} | }} | ||
Версия 08:06, 18 января 2012
Алгоритм Эрли позволяет определить, выводится ли данное слово контекстно-свободной грамматике .
в даннойВход: КС грамматика
Выход: , если выводится в ; — иначе.
Определения
Определение: |
Пусть контекстно-свободная грамматика и — входная цепочка из . Объект вида , где — правило из и — позиция в , называется ситуацией, относящейся к цепочке . | —
Определение: |
-м списком ситуаций для входной цепочки , где , называется множество ситуаций . То есть выводит часть c первого по -й символ. |
Определение: |
Последовательность списков ситуаций | называется списком разбора для входной цепочки .
Алгоритм Эрли
Добавим вспомогательный нетерминал
Построим список разбора для .
Инициализация.
Добавим в ситуацию
Продолжение.
Пока в можно добавить новые ситуации повторяем шаги 1—3.
Шаг 1. Для каждой ситуации , где — j-й символ в , включить в .
Шаг 2. Если , то для каждой ситуации включить в .
Шаг 3. Для всех , для всех таких, что включить в .
Завершение.
Если , то .
Корректность алгоритма
Теорема: |
и и такие, что и . |
Доказательство: |
Докажем утверждение по индукции: Если , то , следовательно , откуда , а по и.п. . Значит . Тогда такие, что , где . Рассмотрим набор , где такое, что . Обозначим длину кратчайшего вывода за , а длину кратчайшего вывода за . Найдем ранг . . Следовательно ранг равен . Значит по и.п. , следовательно по правилу 3 будет добавлена в . |
Пример
Рассмотрим грамматику
Построим для строки список разбора.
— из инициализации
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 1
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 1
— из правила 2
— из правила 2
— из правила 2
— из правила 2
— из правила 2
— из правила 1
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 1
— из правила 2
— из правила 2
— из правила 2
— из правила 2
— из правила 2
— из правила 2
— из правила 1
— из правила 2
— из правила 2
— из правила 2
— из правила 2
— из правила 2
Так как , то .
Литература
Ахо А., Ульман Д. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. — М.:«Мир», 1978. С. 358 — 364.