Języki kontekstowe to dokładnie języki, które może rozpoznać maszyna Turinga za pomocą przestrzeni liniowej i niedeterminizmu. Możesz symulować taką maszynę Turinga przy użyciu czasu wykładniczego, abyś mógł rozpoznać każdy taki język w czasie wykładniczym. Zauważ, że problem z rozpoznawaniem niektórych języków kontekstowych to -complete, co oznacza, że jesteśmy prawie pewni, że nie da się poradzić lepiej niż czas wykładniczy.PSPACE
Porównując to do języków typu 0, oznacza to, że możesz przynajmniej powiedzieć coś o tym, ile czasu zajmuje rozpoznanie języka. Język typu 0 może nawet nie być rozstrzygalny: język wszystkich maszyn Turinga, który się zatrzymał, jest językiem typu 0, ale ponieważ rozpoznanie tego języka jest właśnie problemem zatrzymania, nie jest rozstrzygalne.
Gramatyki kontekstowe nie są zbyt przydatne w praktyce. Kontekstowych darmowych gramatyki są intuicyjne do pracy, ale jako przykłady Wikipedia pokazują , kontekstowych wrażliwe gramatyki bardzo szybko stają się raczej niechlujny. Programy wykorzystujące przestrzeń wielomianową są znacznie łatwiejsze do zaprojektowania (a kompletność gwarantuje istnienie jakiegoś równoważnego CSG, który jest tylko wielomianowo większy niż wykorzystanie przestrzeni przez algorytm).PSPACE
Powodem ich istnienia jest to, że tworzą one bardzo naturalne rozszerzenie gramatyki bezkontekstowej (pozwalasz kontekstowi na określenie, które produkcje są ważne). Prawdopodobnie zainspiruje to Chomsky'ego do zdefiniowania ich i nazwania ich językami typu 1. Pamiętaj, że ta definicja została stworzona, zanim komputery stały się tak szybkie, jak obecnie: bardziej interesuje się teoretykami języka formalnego niż programistami.
Nieograniczone gramatyki stają się jeszcze dziwniejsze: nie ma już pojęcia „rozszerzania” nieterminala i zastępowania go produkcją, być może w zależności od kontekstu. Możesz również dowolnie modyfikować kontekst. To sprawia, że praca z nieograniczonymi gramatykami jest jeszcze mniej intuicyjna: programy są równoważne i dużo bardziej intuicyjne.