Алгоритм Эрли — различия между версиями
(→Алгоритм Эрли) |
|||
Строка 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 \ | + | <i>Шаг 5.</i> Пусть <tex>[A \rightarrow \alpha \cdot , i] \in I_j</tex>. Ищем ситуации вида <tex>[B \rightarrow \gamma \cdot A \delta, k]</tex>. Для каждой из них включить в <tex>I_j</tex> ситуацию <tex>[B \rightarrow \gamma A \cdot \delta, 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> | <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>I_j</tex> для <tex>0 \leqslant j \leqslant n</tex>.<br> |
Версия 00:48, 16 января 2011
Определение: |
Пусть | — контекстно свободная грамматика и — входная цепочка из . Объект вида назовем ситуацией, относящейся к цепочке , если — правило из и . является метасимволом, не принадлежащим ни , ни . .
Определение: |
Для каждого | построим список ситуаций такой, что для тогда и только тогда, когда для некоторых и существуют выводы и .
Определение: |
Последовательность списков | называется списком разбора для входной цепочки .
Алгоритм Эрли
Вход. контекстно свободная грамматика
Выход. Список разбора для цепочки .
Метод.
Строим
Шаг 1. Если — правило из , включить в .
Выполняем шаги 2 и 3 до тех пор, пока можем включать новые ситуации в .
Шаг 2. Если , включить в ситуацию для всех , уже принадлежащих .
Шаг 3. Допустим, что . Для каждого правила из вида включить в ситуацию (если она еще не там).
Построение по .
Шаг 4. Для каждой ситуации , для которой включить в ситуацию .
Выполняем шаги 5 и 6 до тех пор, пока можем включать новые ситуации в .
Шаг 5. Пусть . Ищем ситуации вида . Для каждой из них включить в ситуацию .
Шаг 6. Пусть . Для каждого из включить в ситуацию .
Вычисляем все для .
.
Шаг 4. Шаг 5. Шаг 6.
Литература
- А.Ахо, Дж. Ульман. Теория синтакического анализа, перевода и компиляции. Том 1. Синтактический анализ.