Алгоритм Эрли — различия между версиями
(→Корректность алгоритма) |
|||
Строка 1: | Строка 1: | ||
+ | ==Определения== | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
Строка 27: | Строка 28: | ||
<i>Шаг 5.</i> Если <tex>[A \rightarrow \alpha \cdot , i] \in I_j</tex>, то для каждой ситуации <tex>[B \rightarrow \gamma \cdot A \beta, k] \in I_{i}</tex> включить <tex>[B \rightarrow \gamma A \cdot \beta, k]</tex> в <tex>I_j</tex>.<br> | <i>Шаг 5.</i> Если <tex>[A \rightarrow \alpha \cdot , i] \in I_j</tex>, то для каждой ситуации <tex>[B \rightarrow \gamma \cdot A \beta, k] \in I_{i}</tex> включить <tex>[B \rightarrow \gamma A \cdot \beta, k]</tex> в <tex>I_j</tex>.<br> | ||
<i>Шаг 6.</i> Для всех <tex>[A \rightarrow \alpha \cdot B \beta, i] \in I_j</tex>, для всех <tex>\gamma</tex> таких, что <tex>B \rightarrow \gamma \in P</tex> включить <tex>[B \rightarrow \cdot \gamma, j]</tex> в <tex>I_j</tex>.<br> | <i>Шаг 6.</i> Для всех <tex>[A \rightarrow \alpha \cdot B \beta, i] \in I_j</tex>, для всех <tex>\gamma</tex> таких, что <tex>B \rightarrow \gamma \in P</tex> включить <tex>[B \rightarrow \cdot \gamma, j]</tex> в <tex>I_j</tex>.<br> | ||
+ | |||
+ | |||
Если <tex>[S \rightarrow \alpha \cdot, 0] \in I_n</tex>, то <tex>\omega \in L(G) </tex>.<br> | Если <tex>[S \rightarrow \alpha \cdot, 0] \in I_n</tex>, то <tex>\omega \in L(G) </tex>.<br> | ||
+ | |||
+ | ==Пример== | ||
+ | Рассмотрим грамматику <tex>G</tex> с правилами: <br> | ||
+ | <tex>S \rightarrow T + S</tex> <br> | ||
+ | <tex>S \rightarrow T </tex> <br> | ||
+ | <tex>T \rightarrow F * T</tex> <br> | ||
+ | <tex>T \rightarrow F</tex> <br> | ||
+ | <tex>F \rightarrow ( S )</tex> <br> | ||
+ | <tex>F \rightarrow a</tex> <br> | ||
+ | Построим для строки <tex>\omega = (a + a)</tex> список разбора.<br> | ||
+ | |||
+ | |||
+ | <b><tex>I_0</tex></b> <br> | ||
+ | <tex>[S \rightarrow \cdot T + S, 0]</tex> — из правила 1 <br> | ||
+ | <tex>[S \rightarrow \cdot T, 0]</tex> — из правила 1 <br> | ||
+ | <tex>[T \rightarrow \cdot F * T, 0]</tex> — из правила 3 <br><tex>[T \rightarrow \cdot F, 0]</tex> — из правила 3 <br> | ||
+ | <tex>[F \rightarrow \cdot ( S ), 0]</tex> — из правила 3 <br> | ||
+ | <tex>[S \rightarrow \cdot a, 0]</tex> — из правила 3 <br> | ||
+ | |||
+ | |||
+ | <b><tex>I_1</tex></b> <br> | ||
+ | <tex>[F \rightarrow ( \cdot S ), 0]</tex> — из правила 4 <br> | ||
+ | <tex>[S \rightarrow \cdot T + S, 1]</tex> — из правила 6 <br> | ||
+ | <tex>[S \rightarrow \cdot T, 1]</tex> — из правила 6 <br> | ||
+ | <tex>[T \rightarrow \cdot F * T, 1]</tex> — из правила 6 <br> | ||
+ | <tex>[T \rightarrow \cdot F, 1]</tex> — из правила 6 <br> | ||
+ | <tex>[F \rightarrow \cdot ( S ), 1]</tex> — из правила 6 <br> | ||
+ | <tex>[F \rightarrow \cdot a, 1]</tex> — из правила 6 <br> | ||
+ | |||
+ | |||
+ | <b><tex>I_2</tex></b> <br> | ||
+ | <tex>[F \rightarrow a \cdot, 1]</tex> — из правила 4 <br> | ||
+ | <tex>[T \rightarrow F \cdot * T, 1]</tex> — из правила 5 <br> | ||
+ | <tex>[T \rightarrow F \cdot , 1]</tex> — из правила 5<br> | ||
+ | <tex>[S \rightarrow T \cdot , 1]</tex> — из правила 5 <br> | ||
+ | <tex>[S \rightarrow T \cdot + S, 1]</tex> — из правила 5 <br> | ||
+ | <tex>[F \rightarrow ( S \cdot ), 0]</tex> — из правила 5 <br> | ||
+ | |||
+ | |||
+ | <b><tex>I_3</tex></b> <br> | ||
+ | <tex>[S \rightarrow T + \cdot S, 1]</tex> — из правила 4 <br> | ||
+ | <tex>[S \rightarrow \cdot T + S, 3]</tex> — из правила 6 <br> | ||
+ | <tex>[S \rightarrow \cdot T, 3]</tex> — из правила 6<br> | ||
+ | <tex>[T \rightarrow \cdot F * T, 3]</tex> — из правила 6 <br> | ||
+ | <tex>[T \rightarrow \cdot F, 3]</tex> — из правила 6 <br> | ||
+ | <tex>[F \rightarrow \cdot ( S ), 3]</tex> — из правила 6 <br> | ||
+ | <tex>[F \rightarrow \cdot a, 3]</tex> — из правила 6 <br> | ||
+ | |||
+ | |||
+ | <b><tex>I_4</tex></b> <br> | ||
+ | <tex>[F \rightarrow a \cdot , 3]</tex> — из правила 4 <br> | ||
+ | <tex>[T \rightarrow F \cdot * T, 3]</tex> — из правила 5 <br> | ||
+ | <tex>[T \rightarrow F \cdot , 3]</tex> — из правила 5<br> | ||
+ | <tex>[S \rightarrow T \cdot + S, 3]</tex> — из правила 5 <br> | ||
+ | <tex>[S \rightarrow T \cdot , 3]</tex> — из правила 5 <br> | ||
+ | <tex>[S \rightarrow T + S \cdot , 1]</tex> — из правила 5 <br> | ||
+ | <tex>[F \rightarrow ( S \cdot ), 0]</tex> — из правила 5 <br> | ||
+ | |||
+ | |||
+ | <b><tex>I_5</tex></b> <br> | ||
+ | <tex>[F \rightarrow ( S )\cdot , 0]</tex> — из правила 4 <br> | ||
+ | <tex>[T \rightarrow F \cdot * T, 0]</tex> — из правила 5 <br> | ||
+ | <tex>[T \rightarrow F \cdot , 0]</tex> — из правила 5<br> | ||
+ | <tex>[S \rightarrow T \cdot + S, 0]</tex> — из правила 5 <br> | ||
+ | <tex>[S \rightarrow T \cdot , 0]</tex> — из правила 5 <br> | ||
+ | |||
+ | |||
+ | Так как <tex>[S \rightarrow T \cdot , 0] \in I_5</tex>, то <tex>\omega \in L(G) </tex>.<br> | ||
==Корректность алгоритма== | ==Корректность алгоритма== |
Версия 07:46, 2 декабря 2011
Определения
Определение: |
Пусть | — контекстно свободная грамматика и — входная цепочка из . Объект вида назовем ситуацией, относящейся к цепочке , если — правило из и — позиция в . является метасимволом, не принадлежащим ни , ни .
Определение: |
Для каждого | построим список ситуаций такой, что для тогда и только тогда, когда для некоторых и существуют выводы и .
Определение: |
Последовательность списков | называется списком разбора для входной цепочки .
Алгоритм Эрли
Построим список разбора для
Шаг 1. Если , включить в .
Пока можно включить новые ситуации в повторяем шаги 2 и 3.
Шаг 2. Если , включить в ситуацию для всех из .
Шаг 3. Для всех , для всех таких, что включить в .
Построение по .
Шаг 4. Для каждой ситуации , — j-й символ в включить в .
Пока можно включить новые ситуации в повторяем шаги 5 и 6.
Шаг 5. Если , то для каждой ситуации включить в .
Шаг 6. Для всех , для всех таких, что включить в .
Если , то .
Пример
Рассмотрим грамматику
Построим для строки список разбора.
— из правила 1
— из правила 1
— из правила 3
— из правила 3
— из правила 3
— из правила 3
— из правила 4
— из правила 6
— из правила 6
— из правила 6
— из правила 6
— из правила 6
— из правила 6
— из правила 4
— из правила 5
— из правила 5
— из правила 5
— из правила 5
— из правила 5
— из правила 4
— из правила 6
— из правила 6
— из правила 6
— из правила 6
— из правила 6
— из правила 6
— из правила 4
— из правила 5
— из правила 5
— из правила 5
— из правила 5
— из правила 5
— из правила 5
— из правила 4
— из правила 5
— из правила 5
— из правила 5
— из правила 5
Так как , то .
Корректность алгоритма
Теорема: |
и и такие, что и |
Доказательство: |
Докажем по индукции.
Тогда . По и.п. и существуют и такие, что . Значит и при для утверждение верно.
Тогда и . По и.п. , откуда . Также по и.п. существуют и такие, что . Значит при для утверждение верно.
Тогда . По и.п. и существуют и такие, что . Значит при выполнено , значит для утверждение верно.
Для всех наборов
Докажем утверждение по индукции: . , значит . Рассмотрим набор . , следовательно ранг равен , так как . Значит по и.п. , по правилу 4 получаем, что будет добавлена в .
Если , то , следовательно , откуда , а по и.п. . Значит . Тогда такие, что , где .Рассмотрим набор , где такое, что . Обозначим длину кратчайшего вывода за , а длину кратчайшего вывода за . Найдем ранг . . Следовательно ранг равен . Значит по и.п. , следовательно по правилу 6 будет добавлена в . |
Литература
- А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ.