Алгоритм Эрли — различия между версиями
Строка 29: | Строка 29: | ||
Если <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> | ||
− | + | ==Корректность алгоритма== | |
+ | {{Теорема | ||
+ | |statement = <tex>[A \rightarrow \alpha \cdot \beta, i] \in I_{j} \Leftrightarrow \alpha \Rightarrow^* a_{i+1}...a_{j}</tex> и <tex> \mathcal {9} \gamma </tex> и <tex> \delta</tex> такие, что <tex>S \Rightarrow^* \gamma A \delta</tex> и <tex> \gamma \Rightarrow^* a_1...a_{i}</tex> | ||
+ | |proof = | ||
+ | *Необходимость <br> | ||
+ | Докажем по индукции.<br> | ||
+ | База: для любой ситуации из <tex>I_0</tex> <tex>\alpha \Rightarrow^* \varepsilon </tex> и <tex>S \Rightarrow^* \gamma A \delta </tex> при <tex>\gamma = \varepsilon </tex>.<br> | ||
+ | Индукционный переход (и.п.): пусть верно для всех ситуаций из списков <tex> I_{i}, i \leqslant j </tex>. Пусть включаем <tex>[A \rightarrow \alpha \cdot \beta, i] </tex> в <tex>I_{j}</tex>. Рассмотрим три случая:<br> | ||
+ | *Пусть включаем по правилу 4<br> | ||
+ | Тогда <tex>\alpha = \alpha' a_{j} , [A \rightarrow \alpha' \cdot a_{j} \beta, i] \in I_{j-1}</tex>. По и.п. <tex>\alpha' \Rightarrow^* a_{i+1}...a_{j-1} </tex>и существуют <tex>\gamma'</tex> и <tex>\delta' </tex> такие, что <tex>S \Rightarrow^* \gamma' A \delta', \gamma' = a_1...a_{i} </tex>. Значит <tex> \alpha = \alpha' a_{j} \Rightarrow^* a_{i+1}...a_{j}</tex> и при <tex>\gamma = \gamma', \delta = \delta' </tex> для <tex>[A \rightarrow \alpha \cdot \beta, i]</tex> утверждение верно. | ||
+ | *Пусть включаем по правилу 5<br> | ||
+ | Тогда <tex>\alpha = \alpha' B , [A \rightarrow \alpha' \cdot B \beta, k] \in I_{i}</tex> и <tex> [B \rightarrow \eta \cdot, i] \in I_{j} </tex>. По и.п. <tex>\alpha' \Rightarrow^* a_{k+1}...a_{i}, \eta \Rightarrow^* a_{i+1}...a_{j} </tex>, откуда <tex>\alpha = \alpha' B \Rightarrow^*a_{k+1}...a_{j} </tex>. Также по и.п. существуют <tex>\gamma'</tex> и <tex>\delta' </tex> такие, что <tex>S \Rightarrow^* \gamma' A \delta', \gamma' = a_1...a_{k} </tex>. Значит при <tex>\gamma = \gamma', \delta = \delta' </tex> для <tex>[A \rightarrow \alpha \cdot \beta, i]</tex> утверждение верно. | ||
+ | *Пусть включаем по правилу 6<br> | ||
+ | Тогда <tex>\alpha = \varepsilon, i = j, [B \rightarrow \alpha' \cdot A \beta, k] \in I_{j}</tex>. По и.п. <tex>\alpha' \Rightarrow^* a_{k+1}...a_{i}</tex> и существуют <tex>\gamma'</tex> и <tex>\delta' </tex> такие, что <tex>S \Rightarrow^* \gamma' B \delta', \gamma' = a_1...a_{k} </tex>. Значит при <tex>\gamma = \gamma' \alpha', \delta = \beta \delta' </tex> выполнено <tex> S \Rightarrow^* \gamma A \delta</tex>, значит для <tex>[A \rightarrow \alpha \cdot \beta, i]</tex> утверждение верно. | ||
+ | }} | ||
==Литература== | ==Литература== | ||
*А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ. | *А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ. |
Версия 11:18, 1 декабря 2011
Определение: |
Пусть | — контекстно свободная грамматика и — входная цепочка из . Объект вида назовем ситуацией, относящейся к цепочке , если — правило из и — позиция в . является метасимволом, не принадлежащим ни , ни .
Определение: |
Для каждого | построим список ситуаций такой, что для тогда и только тогда, когда для некоторых и существуют выводы и .
Определение: |
Последовательность списков | называется списком разбора для входной цепочки .
Алгоритм Эрли
Построим список разбора для
Шаг 1. Если , включить в .
Пока можно включить новые ситуации в повторяем шаги 2 и 3.
Шаг 2. Если , включить в ситуацию для всех из .
Шаг 3. Для всех , для всех таких, что включить в .
Построение по .
Шаг 4. Для каждой ситуации , — j-й символ в включить в .
Пока можно включить новые ситуации в повторяем шаги 5 и 6.
Шаг 5. Если , то для каждой ситуации включить в .
Шаг 6. Для всех , для всех таких, что включить в .
Если , то .
Корректность алгоритма
Теорема: |
и и такие, что и |
Доказательство: |
Докажем по индукции.
Тогда . По и.п. и существуют и такие, что . Значит и при для утверждение верно.
Тогда и . По и.п. , откуда . Также по и.п. существуют и такие, что . Значит при для утверждение верно.
|
Литература
- А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ.