Алгоритм Эрли — различия между версиями
Строка 22: | Строка 22: | ||
Строим <tex>I_0</tex><br> | Строим <tex>I_0</tex><br> | ||
<i>Шаг 1.</i> Если <tex>S \rightarrow \alpha</tex> {{---}} правило из <tex>P</tex>, включить <tex>[S \rightarrow \cdot \alpha, 0]</tex> в <tex>I_0</tex>.<br> | <i>Шаг 1.</i> Если <tex>S \rightarrow \alpha</tex> {{---}} правило из <tex>P</tex>, включить <tex>[S \rightarrow \cdot \alpha, 0]</tex> в <tex>I_0</tex>.<br> | ||
− | Выполняем шаги 2 и 3 до тех пор, пока можем включать новые ситуации.<br> | + | Выполняем шаги 2 и 3 до тех пор, пока можем включать новые ситуации в <tex>I_0</tex>.<br> |
<i>Шаг 2.</i> Если <tex>[B \rightarrow \gamma \cdot, 0] \in I_0</tex>, включить в <tex>I_0</tex> ситуацию <tex>[A \rightarrow \alpha B \cdot \beta, 0]</tex> для всех <tex>[A \rightarrow \alpha \cdot B \beta, 0]</tex>, уже принадлежащих <tex>I_0</tex>.<br> | <i>Шаг 2.</i> Если <tex>[B \rightarrow \gamma \cdot, 0] \in I_0</tex>, включить в <tex>I_0</tex> ситуацию <tex>[A \rightarrow \alpha B \cdot \beta, 0]</tex> для всех <tex>[A \rightarrow \alpha \cdot B \beta, 0]</tex>, уже принадлежащих <tex>I_0</tex>.<br> | ||
+ | <i>Шаг 3.</i> Допустим, что <tex>[A \rightarrow \alpha \cdot B \beta, 0] \in I_0</tex>. Для каждого правила из <tex>P</tex> вида <tex>B \rightarrow \gamma</tex> включить в <tex>I_0</tex> ситуацию <tex>[B \rightarrow \cdot \gamma, 0]</tex> (если она еще не там).<br> | ||
+ | Построение <tex>I_j</tex> по <tex>I_0, I_1, ..., I_{j-1}</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> |
Версия 01:57, 15 января 2011
Определение: |
Пусть | — контекстно свободная грамматика и — входная цепочка из . Объект вида назовем ситуацией, относящейся к цепочке , если — правило из и . является метасимволом, не принадлежащим ни , ни . .
Определение: |
Для каждого | построим список ситуаций такой, что для тогда и только тогда, когда для некоторых и существуют выводы и .
Определение: |
Последовательность списков | называется списком разбора для входной цепочки .
Алгоритм Эрли
Вход. контекстно свободная грамматика
Выход. Список разбора для цепочки .
Метод.
Строим
Шаг 1. Если — правило из , включить в .
Выполняем шаги 2 и 3 до тех пор, пока можем включать новые ситуации в .
Шаг 2. Если , включить в ситуацию для всех , уже принадлежащих .
Шаг 3. Допустим, что . Для каждого правила из вида включить в ситуацию (если она еще не там).
Построение по .
Шаг 4. Для каждой ситуации , для которой включить в ситуацию .
Выполняем шаги 5 и 6 до тех пор, пока можем включать новые ситуации в .