Праверьте пожалуйста правильность построения КС-грамматики, порождающей язык:
![$\[\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)
где метасимвол * обозначает любое слово в данном алфавите.
Пусть слово
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
начинается с символа
![$a$ $a$](https://dxdy-01.korotkov.co.uk/f/4/4/b/44bc9d542a92714cac84e01cbbb7fd6182.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)
Т.е.
![$B$ $B$](https://dxdy-03.korotkov.co.uk/f/6/1/e/61e84f854bc6258d4108d08d4c4a085282.png)
возможно является словом с избытком символов
![$d$ $d$](https://dxdy-03.korotkov.co.uk/f/2/1/0/2103f85b8b1477f430fc407cad46222482.png)
(точнее оно может содержат на один символ
![$d$ $d$](https://dxdy-03.korotkov.co.uk/f/2/1/0/2103f85b8b1477f430fc407cad46222482.png)
больше, чем нужно). А
![$B''$ $B''$](https://dxdy-04.korotkov.co.uk/f/f/e/9/fe98e3e032b69661d75498b58f66d9ed82.png)
может содержать на два символа
![$d$ $d$](https://dxdy-03.korotkov.co.uk/f/2/1/0/2103f85b8b1477f430fc407cad46222482.png)
больше, чем нужно.
Далее,
![$B'$ $B'$](https://dxdy-04.korotkov.co.uk/f/3/b/5/3b573ce6b242559dcd67e9ed6a52eb2182.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)
(где
![$S$ $S$](https://dxdy-03.korotkov.co.uk/f/e/2/5/e257acd1ccbe7fcb654708f1a866bfe982.png)
- слово из данного языка)
Итак, если слово x начинается с
![$a$ $a$](https://dxdy-01.korotkov.co.uk/f/4/4/b/44bc9d542a92714cac84e01cbbb7fd6182.png)
, то
![$\[B \to aBB|dS\]$ $\[B \to aBB|dS\]$](https://dxdy-03.korotkov.co.uk/f/6/7/f/67f3d8db67981df5069e97bd00dc7ec282.png)
Теперь пусть слово
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.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$ $A$](https://dxdy-02.korotkov.co.uk/f/5/3/d/53d147e7f3fe6e47ee05b88b166bd3f682.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)
Думаю что есть способы проще, но я нигде примеров не нашел по построению грамматик, может еще книгу мне посоветуете с примерами, очень пригодится