Алгоритм Эрли — различия между версиями
(→Корректность алгоритма) |
|||
Строка 43: | Строка 43: | ||
*Пусть включаем по правилу 6<br> | *Пусть включаем по правилу 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> утверждение верно. | Тогда <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> утверждение верно. | ||
+ | *Достаточность | ||
+ | Для всех наборов <tex>\tau = {\alpha, \beta, \gamma, \delta, A, i , j} </tex> нужно доказать, что если <tex> S \Rightarrow^* \gamma A \delta, \gamma \Rightarrow^* a_1...a_{i}, A \rightarrow \alpha \beta \in P, \alpha \Rightarrow^* a_{i+1}...a{j}</tex>, то <tex> [A \rightarrow \alpha \cdot B \beta, i] \in I_{j}</tex>.<br> | ||
+ | *Рангом набора <tex> \tau </tex> называется <tex> \tau_{1}(\tau) + 2(j + \tau_{2}(\tau) + \tau_{3}(\tau))</tex>, где <tex>\tau_{1}(\tau)</tex> — длина кратчайшего вывода <tex>S \Rightarrow^* \gamma A \delta </tex>, <tex>\tau_{2}(\tau)</tex> — длина кратчайшего вывода <tex>\gamma \Rightarrow^* a_1...a_{i}</tex>, <tex>\tau_{3}(\tau)</tex> — длина кратчайшего вывода <tex>\alpha \Rightarrow^* a_{i+1}...a_{j}</tex>. | ||
+ | Докажем утверждение по индукции:<br> | ||
+ | База: если ранг <tex>\tau</tex> равен 0, то <tex>\tau_{1} = \tau_{2} = \tau_{3} = j = i = 0</tex>. Значит <tex>\alpha = \gamma = \delta = \varepsilon </tex>, <tex>A = S</tex>, следовательно <tex>S \rightarrow \beta \in P</tex>. Значит по правилу 1 <tex>[S \rightarrow \cdot \beta, 0] \in I_0</tex> | ||
+ | Индукционный переход:<br> | ||
+ | Пусть ранг <tex>\tau</tex> равен <tex>r > 0</tex>, пусть для всех наборов с меньшими рангами утверждение верно. Докажем для набора <tex>\tau</tex>. Для этого рассмотрим три случая: | ||
+ | *<tex>\alpha</tex> оканчивается терминалом<br> | ||
+ | <tex>\alpha = \alpha' a</tex>. <tex>\alpha \Rightarrow^*a_{i+1}...a_{j}</tex>, значит <tex>a = a_{j}</tex>. Рассмотрим набор <tex>\tau' = \mathcal {f} \alpha', a_{j} \beta, \gamma, \delta, A, i, j-1 \mathcal {g} </tex>. <tex>A \rightarrow \alpha' a_{j} \beta \in P</tex>, следовательно ранг <tex>\tau'</tex> равен <tex>r - 2</tex>, так как <tex>\tau_{1}(\tau) = \tau_1(\tau'), \tau_2(\tau) = \tau_2(\tau'), \tau_{3}(\tau) = \tau_3(\tau')</tex>. Значит по и.п. <tex>[A \rightarrow \alpha' \cdot a_{j} \beta, i] \in I_{j-1}</tex>, по правилу 4 получаем, что <tex>[A \rightarrow \alpha \cdot \beta, i] </tex> будет добавлена в <tex>I_{j}</tex>. | ||
}} | }} | ||
+ | |||
==Литература== | ==Литература== | ||
*А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ. | *А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ. |
Версия 11:59, 1 декабря 2011
Определение: |
Пусть | — контекстно свободная грамматика и — входная цепочка из . Объект вида назовем ситуацией, относящейся к цепочке , если — правило из и — позиция в . является метасимволом, не принадлежащим ни , ни .
Определение: |
Для каждого | построим список ситуаций такой, что для тогда и только тогда, когда для некоторых и существуют выводы и .
Определение: |
Последовательность списков | называется списком разбора для входной цепочки .
Алгоритм Эрли
Построим список разбора для
Шаг 1. Если , включить в .
Пока можно включить новые ситуации в повторяем шаги 2 и 3.
Шаг 2. Если , включить в ситуацию для всех из .
Шаг 3. Для всех , для всех таких, что включить в .
Построение по .
Шаг 4. Для каждой ситуации , — j-й символ в включить в .
Пока можно включить новые ситуации в повторяем шаги 5 и 6.
Шаг 5. Если , то для каждой ситуации включить в .
Шаг 6. Для всех , для всех таких, что включить в .
Если , то .
Корректность алгоритма
Теорема: |
и и такие, что и |
Доказательство: |
Докажем по индукции.
Тогда . По и.п. и существуют и такие, что . Значит и при для утверждение верно.
Тогда и . По и.п. , откуда . Также по и.п. существуют и такие, что . Значит при для утверждение верно.
Тогда . По и.п. и существуют и такие, что . Значит при выполнено , значит для утверждение верно.
Для всех наборов
Докажем утверждение по индукции: |
Литература
- А.Ахо, Дж. Ульман. Теория синтакcического анализа, перевода и компиляции. Том 1. Синтакcический анализ.