Gramatyka liniowa

W informatyce gramatyka liniowa to gramatyka bezkontekstowa , która ma co najwyżej jeden nieterminal po prawej stronie każdej ze swoich produkcji.

Język liniowy to język generowany przez pewną gramatykę liniową.

Przykład

Przykładem gramatyki liniowej jest G z N = {S}, Σ = {a, b}, P z symbolem startu S i regułami

S → aSb
S → ε

Generuje język .

Związek z gramatyką regularną

Istnieją dwa specjalne typy gramatyk liniowych:

  • gramatyki lewostronnie liniowe lub lewostronnie regularne, w których wszystkie reguły mają postać A → αw , gdzie α jest albo pustym, albo pojedynczym nieterminalem, a w jest ciągiem terminali;
  • prawostronnie liniowe lub prawostronnie regularne, w których wszystkie reguły mają postać A → wα , gdzie w jest ciągiem końcówek, a α jest albo pusta, albo pojedynczym nieterminalem.

Każdy z nich może dokładnie opisywać języki regularne . Gramatyka regularna to gramatyka lewoliniowa lub prawoliniowa.

Zauważ, że wstawiając nowe nieterminale, każdą gramatykę liniową można zastąpić równoważną, w której niektóre reguły są lewoliniowe, a inne prawoliniowe. Na przykład zasady G powyżej można zastąpić

S → aA
A → Sb
S → ε

Jednak wymóg, aby wszystkie reguły były lewoliniowe (lub wszystkie reguły były prawoliniowe) prowadzi do ścisłego zmniejszenia mocy ekspresyjnej gramatyk liniowych.

Ekspresyjna moc

Wszystkie języki regularne są liniowe; odwrotnie, przykładem liniowego, nieregularnego języka jest { a n b n }. jak wyjaśniono powyżej. Wszystkie języki liniowe są bezkontekstowe ; odwrotnie, przykładem bezkontekstowego, nieliniowego języka jest język Dycka z dobrze wyważonymi parami nawiasów. Dlatego języki regularne są właściwym podzbiorem języków liniowych, które z kolei są właściwym podzbiorem języków bezkontekstowych.

Podczas gdy języki regularne są deterministyczne , istnieją języki liniowe, które są niedeterministyczne. Na przykład język palindromów parzystej długości na alfabecie 0 i 1 ma gramatykę liniową S → 0S0 | 1S1 | ε. Dowolny ciąg tego języka nie może być analizowany bez uprzedniego odczytania wszystkich jego liter, co oznacza, że ​​automat przesuwający w dół musi wypróbować alternatywne przejścia stanów, aby uwzględnić różne możliwe długości częściowo przeanalizowanego ciągu. Ten język jest niedeterministyczny. Ponieważ niedeterministyczne języki bezkontekstowe nie mogą być akceptowane w czasie liniowym, w ogólnym przypadku języki liniowe nie mogą być akceptowane w czasie liniowym. Ponadto nie można rozstrzygnąć, czy dany język bezkontekstowy jest liniowym językiem bezkontekstowym.

Język jest liniowy, jeśli można go wygenerować za pomocą automatu przesuwającego o jeden obrót — automatu przesuwającego, który, gdy zacznie strzelać, nigdy więcej nie naciska.

Właściwości zamknięcia

Przypadki pozytywne

Języki linearne są zamknięte w unii. Konstrukcja jest taka sama jak konstrukcja unii języków bezkontekstowych. Niech będą dwoma językami liniowymi, to jest skonstruowany przez gramatykę liniową gdzie i odgrywając rolę gramatyk liniowych dla .

Jeśli L jest językiem liniowym, a M językiem regularnym, to przecięcie liniowym; innymi słowy, języki liniowe są zamknięte na przecięciu z regularnymi zbiorami.

Języki liniowe są zamknięte w homomorfizmie i homomorfizmie odwrotnym .

Wniosek: języki liniowe tworzą pełne trio . Ogólnie rzecz biorąc, pełne trio to rodziny języków, które mają kilka innych pożądanych właściwości matematycznych.

Negatywne przypadki

Języki liniowe nie są domknięte pod przecięciem. Na przykład niech , to ich przecięcie nie tylko nie jest liniowe, ale także nie jest bezkontekstowe. Zobacz lemat o pompowaniu dla języków bezkontekstowych .

W konsekwencji języki liniowe nie są domknięte pod dopełnieniem (ponieważ przecięcie może być skonstruowane przez prawa de Morgana z unii i dopełnienia).