Праверьте пожалуйста правильность построения КС-грамматики, порождающей язык:
![$\[\left\{ {x\;|\;x\, \in \;\{ a,\;d\} *,\quad |x{|_a}\; \ge \;|x{|_d}} \right\};\]$ $\[\left\{ {x\;|\;x\, \in \;\{ a,\;d\} *,\quad |x{|_a}\; \ge \;|x{|_d}} \right\};\]$](https://dxdy-03.korotkov.co.uk/f/6/7/a/67a71496e148a3777f34cc827927560682.png)
где метасимвол * обозначает любое слово в данном алфавите.
Пусть слово

начинается с символа

, тогда рассмотрим два случая (рассмотрим пока слова длины в 4 символа):
![$\[1)a\,\underbrace {\overbrace {add}^{B'}}_B\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,2)a\,\underbrace {\overbrace {dad}^{B''}}_B\,\,\]$ $\[1)a\,\underbrace {\overbrace {add}^{B'}}_B\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,2)a\,\underbrace {\overbrace {dad}^{B''}}_B\,\,\]$](https://dxdy-01.korotkov.co.uk/f/8/2/1/821e12e3fb0ab14287f6f8a8a27f379582.png)
Т.е.

возможно является словом с избытком символов

(точнее оно может содержат на один символ

больше, чем нужно). А

может содержать на два символа

больше, чем нужно.
Далее,

всегда можно представить в виде двух стоящих рядом подцепочек, каждая из которых содержит на одно вхождение символа "d" больше, чем нужно. Поэтому в первом случае:
![$\[B \to a\overbrace {BB}^{B'}\]$ $\[B \to a\overbrace {BB}^{B'}\]$](https://dxdy-01.korotkov.co.uk/f/0/1/e/01e771c2d74a4cc89981491c751ffda082.png)
В случае 2:
![$\[B \to d\overbrace S^{B''}\]$ $\[B \to d\overbrace S^{B''}\]$](https://dxdy-04.korotkov.co.uk/f/f/5/6/f566a06a30743850416099e87559b5f382.png)
(где

- слово из данного языка)
Итак, если слово x начинается с

, то
![$\[B \to aBB|dS\]$ $\[B \to aBB|dS\]$](https://dxdy-03.korotkov.co.uk/f/6/7/f/67f3d8db67981df5069e97bd00dc7ec282.png)
Теперь пусть слово

начинается с символа d. Тогда получим два случая:
![$\[1)d\,\underbrace {a\overbrace {da}^{A'}}_A\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,2)a\,\underbrace {\overbrace {dad}^{A''}}_A\,\,\]$ $\[1)d\,\underbrace {a\overbrace {da}^{A'}}_A\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,2)a\,\underbrace {\overbrace {dad}^{A''}}_A\,\,\]$](https://dxdy-04.korotkov.co.uk/f/f/3/0/f30810b4056d6d6baa988bcb23125a2182.png)
Тогда
![$\[A \to aS|daSa|dSaa|daaS\]$ $\[A \to aS|daSa|dSaa|daaS\]$](https://dxdy-04.korotkov.co.uk/f/7/7/8/778f8a1e747291bbc2113e7e0848717582.png)
(т.к. в слове

всегда содержится как минимум на два символа "a" больше, чем символов "d")
Собрав все вместе, получим ответ:
![$\[\begin{array}{l}
S \to aB|dA|\varepsilon \\
B \to aBB|dS\\
A \to aS|daSa|dSaa|daaS
\end{array}\]$ $\[\begin{array}{l}
S \to aB|dA|\varepsilon \\
B \to aBB|dS\\
A \to aS|daSa|dSaa|daaS
\end{array}\]$](https://dxdy-04.korotkov.co.uk/f/f/1/4/f140af7559436aa78389e06d8ce7dae482.png)
Думаю что есть способы проще, но я нигде примеров не нашел по построению грамматик, может еще книгу мне посоветуете с примерами, очень пригодится