297
правок
Изменения
→LR(k)-грамматика
== LR(k)-грамматика ==
{{Определение
|id=def_augmented_grammar)
Пусть <tex>\Gamma =\langle \Sigma, N, S, P \rangle</tex> {{---}} [[Контекстно-свободные_грамматики,_вывод,_лево-_и_правосторонний_вывод,_дерево_разбора|контекстно-свободная]] грамматика. '''Пополненной грамматикой''' (англ. ''augmented grammar''), полученной из <tex>\Gamma</tex>, назовем грамматику <tex>\Gamma' =\langle \Sigma', N', S', P' \rangle</tex>, где <tex>\Sigma' = \Sigma; N' = N \cup \{S'\}; S' \notin N; P' = P \cup \{S' \to S\}</tex>
}}
{{Определение
|id=def_LR_K
|definition=
Пусть <tex>\Gamma' =\langle \Sigma', N', S', P' \rangle</tex> {{---}} пополненная грамматика для КС-грамматики <tex>\Gamma</tex>. Грамматика <tex>\Gamma</tex> явяется '''LR(k)-грамматикой''', если для любых двух [[Контекстно-свободные_грамматики,_вывод,_лево-_и_правосторонний_вывод,_дерево_разбора#Лево-_и_правосторонний_вывод_слова|правосторонних выводов]] вида:* <tex>S' \Rightarrow^* \alpha beta A w t z \Rightarrow \beta \alpha t z \beta Rightarrow^* w , </tex> если <tex>|t|=k</tex>или <tex>|t|<k,|z|=0 (z = \varepsilon)</tex>* <tex>S' \Rightarrow^* \gamma B x t z' \Rightarrow \alpha gamma \xi t z' \beta y Rightarrow^* w', </tex>,в которых если <tex> |t|<k \mathrm{FIRST}_k(w) Rightarrow z= \mathrm{FIRST}_k(y)varepsilon </tex> верно, должно быть что <tex>\alpha A y gamma \xi = \gamma B xbeta \alpha</tex>. Другими словами, следует, что <tex>\alpha beta = \gamma, </tex> и <tex>A=B, y=x </tex>.
}}
Говоря неформально, мы делаем правостороннюю свёртку нашей строки в стартовый нетерминал. Если по не более чем <tex>k</tex> символам неразобранной строки мы можем однозначно определить, во что сворачивается хвост выведенного правила, то грамматика будет LR(k).
Использование в определении LR(k)-грамматики пополненной грамматики существенно для однозначного определения конца анализа. Действительно, если грамматика использует <tex>S</tex> в правых частях правил, то свертка основы в <tex>S</tex> не может служить сигналом приема входной цепочки. Свертка же в <tex>S'</tex> в пополненной грамматике служит таким сигналом, поскольку <tex>S'</tex> нигде, кроме начальной сентенциальной формы, не встречается.
LR(k) означает, что