Упражнение 2.1.25 |
Неоднозначность в контекстно-свободных грамматиках
7.2. Однозначные контекстно-свободные грамматики
Определение 7.2.1.
Вывод в контекстно-свободной грамматике называется левосторонним
( левым,
leftmost derivation),
если на каждом шаге вывода заменяется самое
левое из всех вхождений вспомогательных символов
(то есть каждый шаг вывода имеет вид ,
где
,
и
).
Иногда в левосторонних выводах вместо
пишут \lmarrow. Правосторонний
( правый ) вывод
определяется аналогично.
В правосторонних выводах вместо
пишут \rmarrow.
Пример 7.2.2. Вывод
![S \Rightarrow SS \Rightarrow Sab \Rightarrow SSab \Rightarrow
abSab \Rightarrow ababab](/sites/default/files/tex_cache/6fc17399eb22ba43c6711186172c4165.png)
Лемма 7.2.3. Для каждого слова, выводимого в контекстно-свободной грамматике, существует левосторонний вывод.
Лемма 7.2.4. Пусть G - контекстно-свободная грамматика над алфавитом . Пусть
. Тогда существует взаимно-однозначное соответствие
между левосторонними выводами слова w
в грамматике G
и деревьями вывода в грамматике G,
кроной которых является w.
Пример 7.2.5. Рассмотрим дерево вывода из примера 7.1.2. Ему соответствует левосторонний вывод
![S \mymathrel{\lmarrow}
SS \mymathrel{\lmarrow}
SSS \mymathrel{\lmarrow}
abSS \mymathrel{\lmarrow}
ababS \mymathrel{\lmarrow}
ababab .](/sites/default/files/tex_cache/95ad4d2ce952305a899af44105f138fc.png)
Определение 7.2.6. Контекстно-свободная грамматика называется неоднозначной (ambiguous), если существует слово, которое имеет два или более левосторонних вывода (устаревший термин - неопределенная грамматика). В противном случае контекстно-свободная грамматика называется однозначной (unambiguous).
Пример 7.2.7. Контекстно-свободная грамматика из примера 7.1.2 неоднозначна. Слово ababab имеет два левосторонних вывода:
![S \mymathrel{\lmarrow}
SS \mymathrel{\lmarrow}
SSS \mymathrel{\lmarrow}
abSS \mymathrel{\lmarrow}
ababS \mymathrel{\lmarrow}
ababab](/sites/default/files/tex_cache/7414079d1ba8fab2790c12962377950a.png)
![S \mymathrel{\lmarrow}
SS \mymathrel{\lmarrow}
abS \mymathrel{\lmarrow}
abSS \mymathrel{\lmarrow}
ababS \mymathrel{\lmarrow}
ababab .](/sites/default/files/tex_cache/d80603dfa41afc33ed7eddf7546aa128.png)
Пример 7.2.8.
Пусть .
Контекстно-свободная грамматика
![\begin{align*}
S \; & {\to} \; S \trm{\lor} D , & C \; & {\to} \; \trm{\lnot} C , \\
S \; & {\to} \; D , & C \; & {\to} \; \trm{(} S \trm{)} , \\
D \; & {\to} \; D \trm{\land} C ,& C \; & {\to} \; V , \\
D \; & {\to} \; C , & V \; & {\to} \; V \trm{\#} , \\
& & V \; & {\to} \; \trm{p}
\end{align*}](/sites/default/files/tex_cache/984fd15e81da4e60c7461f63b4886348.png)
![\trm{\lnot}](/sites/default/files/tex_cache/cdcd508adea7ac377d7a727073b26a28.png)
![\trm{\land}](/sites/default/files/tex_cache/e43ffd3672a30e0cdb5efbf4426d85f7.png)
![\trm{\lor}](/sites/default/files/tex_cache/53b7c3de977a8b6e3ab36bf4979b4566.png)
Определение 7.2.9. Контекстно-свободный язык называется существенно неоднозначным (inherently ambiguous), если каждая контекстно-свободная грамматика, порождающая этот язык, является неоднозначной.
Пример 7.2.10. Язык, порождаемый контекстно-свободной грамматикой из примера 7.1.2, не является существенно неоднозначным. Он порождается однозначной грамматикой
![\begin{align*}
S \; & {\to} \; TS , \\
S \; & {\to} \; T , \\
T \; & {\to} \; ab , \\
T \; & {\to} \; aSb .
\end{align*}](/sites/default/files/tex_cache/788398776cf46b9255d5051b91143721.png)
Пример 7.2.11.
Пусть .
Контекстно-свободный язык {akbmcn | k = m или m = n}
является существенно неоднозначным.
Доказательство этого факта можно найти
в [АхоУль, с. 234-236].
Упражнение 7.2.12. Однозначна ли контекстно-свободная грамматика
![\begin{align*}
K \; & {\to} \; a , \\
K \; & {\to} \; b , \\
K \; & {\to} \; K \trm{+} K ,\\
K \; & {\to} \; K \trm{-} K
\end{align*}](/sites/default/files/tex_cache/b4f5ace41d09512718b5d6a3c72ab0d5.png)
![\Sigma = \{a,b,\trm{+},\trm{-}\}](/sites/default/files/tex_cache/5c559fdf278243c6e3c6ddca3b3fcad6.png)
Упражнение 7.2.13. Однозначна ли контекстно-свободная грамматика
![\begin{align*}
K \; & {\to} \; a , \\
K \; & {\to} \; b , \\
K \; & {\to} \; \trm{+} K K , \\
K \; & {\to} \; \trm{-} K K
\end{align*}](/sites/default/files/tex_cache/4d3d7d98e29b37927dac01cbd071378a.png)
![\Sigma = \{a,b,\trm{+},\trm{-}\}](/sites/default/files/tex_cache/5c559fdf278243c6e3c6ddca3b3fcad6.png)
Упражнение 7.2.14. Однозначна ли контекстно-свободная грамматика
![\begin{align*}
K \; & {\to} \; a , \\
K \; & {\to} \; b , \\
K \; & {\to} \; \trm{(} K \trm{+} K \trm{)} , \\
K \; & {\to} \; \trm{(} K \trm{-} K \trm{)}
\end{align*}](/sites/default/files/tex_cache/fd84b8319f8489940d9bcf195a78f996.png)
![\Sigma = \{a,b,\trm{+},\trm{-},\trm{)},\trm{(}\}](/sites/default/files/tex_cache/40909d690e9270e430d44ee4279a9b6d.png)
Упражнение 7.2.15. Однозначна ли контекстно-свободная грамматика
![\begin{align*}
E \; & {\to} \; E c E , \\
E \; & {\to} \; E d E , \\
E \; & {\to} \; a E b , \\
E \; & {\to} \; i ?
\end{align*}](/sites/default/files/tex_cache/7ca7a4e492d7dfa7aba6c269028e87ee.png)
Упражнение 7.2.16.Найти однозначную контекстно-свободную грамматику, эквивалентную грамматике
![\begin{align*}
S \; & {\to} \; a S , \\
S \; & {\to} \; a S b , \\
S \; & {\to} \; c .
\end{align*}](/sites/default/files/tex_cache/6519a3355574cebe5ea4dd68d0ebbc7c.png)
Упражнение 7.2.17.Найти однозначную контекстно-свободную грамматику, эквивалентную грамматике
![\begin{align*}
S \; & {\to} \; a S aaaa , \\
S \; & {\to} \; a S aa , \\
S \; & {\to} \; aa S a , \\
S \; & {\to} \; b .
\end{align*}](/sites/default/files/tex_cache/42fb14cbc44f69bdc7ce3e2b0488b8c5.png)