Dlaczego potrzebne są terminale? Czy moje rozwiązanie jest wystarczające?

Próbuję skupić się na gramatyce wolnej od kontekstu i myślę, że jestem blisko. To, co mnie dziwi, to jedno pytanie (robię pytania ćwiczeniowe, ponieważ mam egzamin za miesiąc):

Wymyśliłem ten język, ale uważam, że to źle.

S --> aSb | A | B
A --> aA | Σ
B --> bB | Σ

Najwyraźniej jest to właściwe rozwiązanie:

S --> aSb | aA | bB
A --> aA | Σ
B --> bB | Σ

Nie do końca rozumiem, dlaczego tak jestS --> aSb | aA | bB i nie tylkoS --> aSb | A | B. Jakie są potrzeby terminali? Czy nie mogę po prostu zadzwonić do A i w ten sposób chwycić terminale?

Testowanie, aby sprawdzić, czy mogę wygenerować ciąg: aaabbbb

S --> aSb --> aaSbb --> aaaSbbb --> aaaBbbb --> aaabbbb

Wierzę, że generuję łańcuch poprawnie, ale nie jestem pewien. Mówię sobie, dlaczegoS --> aSb | aA | bB czy to jeśli zaczniemy odaA a następnie zastąpA za, mamy dwaaktóry daje nam nasz poprawny ciąg, ponieważ nie są równe, można to zrobić również za pomocą b. Wszelkie porady są bardzo mile widziane.

W krotkę (krotka G-4)

V (Brak terminali) = {A, B}
Σ (Terminale) = {a, b}
P = {} // nie jestem pewien, jak wyrazić moje rozwiązanie w R? Czy w tym celu musiałbym użyć ciągu testowego?
S = A

questionAnswers(1)

yourAnswerToTheQuestion