Postać normalna Chomskiego

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Postać normalna Chomskiego to postać gramatyki bezkontekstowej, w której wszystkie reguły (inaczej: produkcje) są postaci:

Aa
ABC

gdzie małe litery oznaczają symbole terminalne, duże zaś nieterminalne.

Każdą gramatykę bezkontekstową niegenerującą symbolu pustego można przekształcić do postaci normalnej ChomskiegoSzablon:Odn.

Żeby rozszerzyć ten zbiór do wszystkich gramatyk bezkontekstowych, rozszerza się czasem postać normalną Chomskiego o reguły:

Sϵ (S – symbol startowy, ϵ – słowo puste), ale gramatyka zawierająca taką regułkę nie może zawierać S po prawej stronie żadnej reguły.

Gramatyka taka to de facto alternatywa gramatyki w postaci normalnej oraz gramatyki generującej tylko symbol pusty.

Konstrukcja

Zastąpienie symboli terminalnych symbolami nieterminalnymi

Wszystkie symbole terminalne z alfabetu gramatyki zastępujemy symbolami nieterminalnymi, które nie są jeszcze elementami danej gramatyki. Następnie dodajemy produkcje posiadające te nowo wprowadzone symbole po lewej stronie, a po prawej stronie symbole terminalne, które zostały przez nie zastąpione.

Przykładowo, poniższa gramatyka bezkontekstowa:

SaAb|ab
AS|aaSc

poprzez zastosowanie odpowiednich zastąpień zostaje przetransformowana do formy:

SAaAAb|AaAb
AS|AaAaSAc
Aaa
Abb
Acc

Eliminacja reguł łańcuchowych

Reguły łańcuchowe mają postać AB, gdzie A i B to symbole nieterminalne. Do każdego symbolu A dodajemy produkcję Aα jeśli α nie składa się tylko z jednego symbolu nieterminalnego oraz jeśli dana gramatyka zawiera produkcję postaci Bα. W przypadku powyższej gramatyki eliminacja reguł łańcuchowych dotyczy tylko jednej produkcji: AS. Po usunięciu tej produkcji gramatyka będzie miała postać:

SAaAAb|AaAb
AAaAAb|AaAb|AaAaSAc
Aaa
Abb
Acc

Eliminacja reguł, w których po prawej stronie stoją więcej niż 2 symbole nieterminalne

We wszystkich produkcjach tego typu, czyli o postaci AA1A2A3A4, wprowadzamy nowe symbole nieterminalne, które nie są elementami zbioru symboli nieterminalnych danej gramatyki, w poniższy sposób:

AA1B2
B2A2B3
B3A3A4

W powyższej przykładowej gramatyce eliminacji muszą podlec reguły

SAaAAb
AAaAAb|AaAaSAc

W tym celu wprowadzamy nowe symbole nieterminalne B,C:

SAaB
AAaB|AaC
BAAb
CAaSAc

Po pierwszej turze eliminacji gramatyka zawiera jednak jedną produkcję, gdzie po prawej stronie występują więcej niż 2 symbole nieterminalne: CAaSAc. By ją znormalizować, wprowadzamy kolejny symbol, D:

CAaD
DSAc

Po tym kroku gramatyka znajduje się w postaci normalnej Chomskiego:

SAaB|AaAb
AAaB|AaC|AaAb
BAAb
CAaD
DSAc
Aaa
Abb
Acc

Zobacz też

Przypisy

Szablon:Przypisy

Bibliografia