Алгоритм Эрли — различия между версиями
Строка 28: | Строка 28: | ||
<i>Шаг 4.</i> Для каждой ситуации <tex>[B \rightarrow \alpha \cdot a \beta, i] \in I_{j-1}</tex>, для которой <tex>a = a_j</tex> включить в <tex>I_j</tex> ситуацию <tex>[B \rightarrow \alpha a \cdot \beta, i] </tex>.<br> | <i>Шаг 4.</i> Для каждой ситуации <tex>[B \rightarrow \alpha \cdot a \beta, i] \in I_{j-1}</tex>, для которой <tex>a = a_j</tex> включить в <tex>I_j</tex> ситуацию <tex>[B \rightarrow \alpha a \cdot \beta, i] </tex>.<br> | ||
Выполняем шаги 5 и 6 до тех пор, пока можем включать новые ситуации в <tex>I_j</tex>.<br> | Выполняем шаги 5 и 6 до тех пор, пока можем включать новые ситуации в <tex>I_j</tex>.<br> | ||
+ | <i>Шаг 5.</i> Пусть <tex>[A \rightarrow \alpha \cdot , i] \in I_j</tex>. Ищем ситуации вида <tex>[B \rightarrow \alpha \cdot A \beta, k]</tex>. Для каждой из них включить в <tex>I_j</tex> ситуацию <tex>[B \rightarrow \alpha A \cdot \beta, k]</tex>.<br> | ||
+ | <i>Шаг 6.</i> Пусть <tex>[A \rightarrow \alpha \cdot B \beta, i] \in I_j</tex>. Для каждого <tex>B \rightarrow \gamma</tex> из <tex>P</tex> включить в <tex>I_j</tex> ситуацию <tex>[B \rightarrow \cdot \gamma, j]</tex>.<br> | ||
+ | Вычисляем все <tex>I_j</tex> для <tex>0 \leqslant j \leqslant n</tex>.<br> | ||
+ | <tex>\omega \in L(G) \Leftrightarrow [S \rightarrow \alpha \cdot, 0] \in I_n</tex>. |
Версия 02:18, 15 января 2011
Определение: |
Пусть | — контекстно свободная грамматика и — входная цепочка из . Объект вида назовем ситуацией, относящейся к цепочке , если — правило из и . является метасимволом, не принадлежащим ни , ни . .
Определение: |
Для каждого | построим список ситуаций такой, что для тогда и только тогда, когда для некоторых и существуют выводы и .
Определение: |
Последовательность списков | называется списком разбора для входной цепочки .
Алгоритм Эрли
Вход. контекстно свободная грамматика
Выход. Список разбора для цепочки .
Метод.
Строим
Шаг 1. Если — правило из , включить в .
Выполняем шаги 2 и 3 до тех пор, пока можем включать новые ситуации в .
Шаг 2. Если , включить в ситуацию для всех , уже принадлежащих .
Шаг 3. Допустим, что . Для каждого правила из вида включить в ситуацию (если она еще не там).
Построение по .
Шаг 4. Для каждой ситуации , для которой включить в ситуацию .
Выполняем шаги 5 и 6 до тех пор, пока можем включать новые ситуации в .
Шаг 5. Пусть . Ищем ситуации вида . Для каждой из них включить в ситуацию .
Шаг 6. Пусть . Для каждого из включить в ситуацию .
Вычисляем все для .
.