Удаление eps-правил из грамматики — различия между версиями
Boichenko (обсуждение | вклад) |
|||
Строка 2: | Строка 2: | ||
|definition = Правила вида <tex>A \to \varepsilon</tex> называются <tex>\varepsilon</tex>-правилами. | |definition = Правила вида <tex>A \to \varepsilon</tex> называются <tex>\varepsilon</tex>-правилами. | ||
}} | }} | ||
− | + | {{Определение | |
− | + | |definition = Назовем КС-грамматику <tex>G=(N,\Sigma, P, S)</tex> грамматикой без <tex>\varepsilon</tex>-правил (или неукорачивающей), если либо<br/> | |
− | + | :(1) <tex>P</tex> не содержит <tex>\varepsilon</tex>-правил, либо | |
− | - | + | :(2) есть точно одно <tex>\varepsilon</tex>-правило <tex>S \to \varepsilon</tex> и <tex>S</tex> не встречается в правых частях остальных правил из <tex>P</tex>. |
− | + | }} | |
− | + | По данной произвольной КС-грамматике <tex>G</tex> часто бывает удобно строить новую КС-грамматику <tex>G'</tex> без <tex>\varepsilon</tex>-правил, эквивалентную исходной. | |
− | + | ==Алгоритм удаления ε-правил== | |
− | + | :''Вход''. КС-грамматика <tex> G=(N,\Sigma, P, S)</tex>. | |
− | + | :''Выход''. Эквивалентная КС-грамматика <tex> G'=(N',\Sigma, P', S') </tex> без <tex>\varepsilon</tex>-правил. | |
− | <tex> | + | :''Метод''. |
− | + | (1) Построить <tex>N_e=\{A \mid A \in N</tex> и <tex>A \Rightarrow_{G}^{*}\varepsilon\}</tex>. | |
− | <tex> | + | (2) Построить <tex>P'</tex> так: |
− | + | (a) Если <tex>A \rightarrow \alpha_0 B_1 \alpha_1 B_2 \alpha_2 ... B_k \alpha_k \in P, k \geqslant 0</tex> и <tex>B_i \in N_e</tex> для <tex>1 \leqslant i \leqslant k</tex>, | |
− | + | но ни один символ в цепочках <tex>a_j (1 \leqslant j \leqslant k) \notin N_e</tex>, то включить в <tex>P'</tex> все правила | |
− | + | вида <tex>A \rightarrow \alpha_0 X_1 \alpha_1 X_2 \alpha_2 ... X_k \alpha_k</tex> | |
− | <tex> | + | где <tex>X_i-</tex> либо <tex>B_i</tex>, либо <tex>\varepsilon</tex>, но не включать правило <tex>A \rightarrow \varepsilon</tex> (это могло бы произойти |
− | + | в случае, если все <tex>\alpha_i</tex> равны <tex>\varepsilon</tex>). | |
− | <tex> | + | (3) Если <tex>S \in N_e</tex>, включить в <tex>P'</tex> правила |
− | + | <tex>S' \rightarrow \varepsilon \mid S</tex> | |
− | + | где <tex>S'-</tex> новый символ, и положить <tex>N'=N \cup \{ S' \}</tex>. В противном случае | |
− | + | положить <tex>N'=N</tex> и <tex>S'=S</tex>. | |
− | + | (4) Положить <tex> G'=(N',\Sigma, P', S')</tex>. <tex>\Box</tex> | |
− | <tex> | + | == Литература == |
− | + | * Ахо Альфред, Джеффри Ульман. Теория Синтаксического Анализа, Перевода и Компиляции. Том 1. | |
− | <tex>A \ | + | * Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман. Введение в теорию автоматов, языков и вычислений. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | <tex> | ||
− | |||
− | <tex>A \ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <tex> | ||
− | |||
− | <tex> | ||
− | |||
− | |||
− | |||
− | <tex> | ||
− | |||
− | == | ||
− |
Версия 00:33, 29 октября 2010
Определение: |
Правила вида | называются -правилами.
Определение: |
Назовем КС-грамматику
| грамматикой без -правил (или неукорачивающей), если либо
По данной произвольной КС-грамматике
часто бывает удобно строить новую КС-грамматику без -правил, эквивалентную исходной.Алгоритм удаления ε-правил
- Вход. КС-грамматика .
- Выход. Эквивалентная КС-грамматика без -правил.
- Метод.
(1) Построитьи . (2) Построить так: (a) Если и для , но ни один символ в цепочках , то включить в все правила вида где либо , либо , но не включать правило (это могло бы произойти в случае, если все равны ). (3) Если , включить в правила где новый символ, и положить . В противном случае положить и . (4) Положить .
Литература
- Ахо Альфред, Джеффри Ульман. Теория Синтаксического Анализа, Перевода и Компиляции. Том 1.
- Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман. Введение в теорию автоматов, языков и вычислений.