Kontekstfrie sprog og kontekstfølsomme sprog er to kategorier af formelle sprog i beregningsmæssig kompleksitetsteori. Disse sprog er defineret af de regler, der styrer deres dannelse, og forståelsen af forskellene mellem dem er vigtig for at studere deres egenskaber og anvendelser inden for forskellige områder såsom cybersikkerhed.
Et kontekstfrit sprog er en form for formelt sprog, der kan genereres af en kontekstfri grammatik. En kontekstfri grammatik består af et sæt produktionsregler, hvor hver regel specificerer, hvordan et ikke-terminalt symbol kan erstattes af en sekvens af symboler. Nøglekarakteristikken ved en kontekstfri grammatik er, at venstre side af hver produktionsregel kun består af et enkelt ikke-terminalt symbol. Dette betyder, at udskiftningen af et ikke-terminalt symbol kan ske i enhver sammenhæng, uden nogen begrænsninger pålagt af omgivende symboler.
Overvej for eksempel den kontekstfri grammatik G med produktionsreglerne:
S -> aSb
S -> ε
Denne grammatik genererer et kontekstfrit sprog L(G) = {anbn | n >= 0}, som repræsenterer sættet af alle strenge, der består af et 'a' efterfulgt af det samme antal 'b'er. I dette tilfælde kan det ikke-terminale symbol S erstattes af 'aSb' eller af den tomme streng ε, uanset i hvilken kontekst det optræder.
På den anden side er et kontekstfølsomt sprog en mere ekspressiv type formelt sprog, der kan genereres af en kontekstfølsom grammatik. En kontekstafhængig grammatik består af et sæt produktionsregler, hvor hver regel specificerer, hvordan en streng af symboler kan erstattes af en anden streng af symboler, underlagt visse kontekstbetingelser. Kontekstbetingelserne er defineret af tilstedeværelsen af specifikke symboler eller rækker af symboler i den omgivende kontekst.
Formelt har en kontekstfølsom grammatik regler af formen αXβ -> αγβ, hvor α og β er strenge af symboler, X er et ikke-terminalt symbol, og γ er en streng af symboler, der kan erstatte X i den kontekst, der er specificeret af α og β. Kontekstbetingelserne kan være vilkårlige, så længe de kan udtrykkes med symbolerne i α og β.
Overvej for eksempel den kontekstfølsomme grammatik G' med produktionsreglerne:
S -> aSb
Sa -> aS
bS -> Sb
ε -> ε
Denne grammatik genererer et kontekstfølsomt sprog L(G') = {anbn | n >= 0}, hvilket er det samme sprog som før. Men i dette tilfælde har produktionsreglerne yderligere kontekstbetingelser. For eksempel specificerer reglen Sa -> aS, at det ikke-terminale symbol S kun kan erstattes af 'aS', hvis det er indledt med et 'S'. Tilsvarende specificerer reglen bS -> Sb, at det ikke-terminale symbol S kun kan erstattes af 'Sb', hvis det efterfølges af et 'S'. Disse kontekstbetingelser begrænser de mulige erstatninger for det ikke-terminale symbol S, hvilket gør sproget kontekstfølsomt.
Den største forskel mellem kontekstfri sprog og kontekstfølsomme sprog ligger i de regler, der styrer deres dannelse. Kontekstfrie sprog kan genereres af kontekstfri grammatikker, hvor udskiftningen af ikke-terminale symboler ikke er begrænset af den omgivende kontekst. På den anden side kræver kontekstfølsomme sprog kontekstfølsomme grammatikker, hvor udskiftningen af ikke-terminale symboler er underlagt specifikke kontekstbetingelser.
Andre seneste spørgsmål og svar vedr Chomsky Hierarki og kontekstfølsomme sprog:
- Hvad betyder det, at et sprog er stærkere end et andet?
- Er der aktuelle metoder til at genkende Type-0? Forventer vi, at kvantecomputere gør det muligt?
- Beskriv processen med at designe en kontekstfølsom grammatik til et sprog bestående af strenge med lige mange enere, toere og treere.
- Giv et eksempel på et kontekstfølsomt sprog og forklar, hvordan det kan genkendes af en kontekstfølsom grammatik.
- Hvordan adskiller type 0-sprog, også kendt som rekursivt enumerable sprog, sig fra andre typer sprog med hensyn til beregningsmæssig kompleksitet?
- Hvad er Chomsky-hierarkiet af sprog, og hvordan klassificerer det formelle grammatikker baseret på deres generative kraft?