Język kontekstowy

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Język kontekstowy (ang. context-sensitive language) – język formalny generowany przez gramatykę kontekstową[1]. W hierarchii Chomskiego jest zdefiniowany jako język typu 1. Klasa języków kontekstowych jest właściwym podzbiorem klasy języków rekurencyjnych.

Definicje

Istnieje kilka równoważnych definicji języka kontekstowego. Język L nazywamy kontekstowym wtedy i tylko wtedy, gdy:

  1. Istnieje gramatyka kontekstowa G generująca język L[1].
  2. Istnieje automat liniowo ograniczony potrafiący rozstrzygnąć czy słowo x należy do języka L[2].

Językami kontekstowymi są wszystkie języki bezkontekstowe oraz języki regularne.

Właściwości

Klasa języków kontekstowych LK jest zamknięta ze względu na operacje:

  1. sumy teoriomnogościowej: L1,L2LKL1L2LK
  2. iloczynu teoriomnogościowego: L1,L2LKL1L2LK
  3. konkatenację: L1,L2LKL1L2LK
  4. dopełnienie: LLKLLK

Rozstrzygnięcie, czy słowo x należy do języka kontekstowego L, jest problemem PSPACE-zupełnym.

Przykład

Język słów nad alfabetem binarnym, których pierwsza połowa równa jest drugiej, jest kontekstowy (ale nie bezkontekstowy!).

Sϵ
SA – symbol startowy przechodzi w słowo puste lub A
A0AX0
A1AX1
AA0X0
AA1X1 – w miejsce A generowane jest słowo wAiXiwXR, gdzie w jest pewnym słowem binarnym, wXR jest zaś tym samym słowem, tyle że odwróconym i przedstawionym w postaci symboli nieterminalnych X0 i X1, zamiast zwykłych 0 i 1
A0X0A0X0
A0X1A0X1
A1X0A1X0
A1X1A1X1 – znajdujący się najbardziej na lewo symbol słowa XiwXR zostaje zaznaczony
X0X0X0X0
X0X1X1X0
X1X0X0X1
X1X1X1X1 – zaznaczony symbol wędruje w prawo
X00
X11 – i na końcu zmienia się w symbol terminalny, któremu odpowiada. Pozwalamy co prawda X-owi zmienić się szybciej, ale wtedy żaden z X-ów na prawo od niego nigdy nie zamieni się w symbol terminalny, więc reguła ta de facto może być użyta tylko kiedy nie ma już żadnych nieterminali na prawo od zmienianego. Kiedy całe słowo wXR przejdzie już na prawo, będziemy mieli słowo postaci wAiwi
A00
A11Ai po wykonaniu całej pracy zmienia się w zwykłe i

Przykładowe wyprowadzenie:

SA0AX001AX1X001A1X1X1X001A1X1X1X0
01A1X1X1X001A1X1X1X001A1X1X0X101A1X1X01
01A1X1X0101A1X1X0101A1X0X1101A1X01101A1X01101A1011011011

Przykład (2)

Przykładem języka kontekstowego, który nie jest bezkontekstowy jest zbiór słów L = {an: gdzie n jest liczbą pierwszą}

Przypisy

Szablon:Przypisy

Szablon:Języki formalne i gramatyki