Kontextfri grammatik ( CS-grammatik , kontextfri grammatik ) är ett specialfall av formell grammatik (typ 2 enligt Chomsky-hierarkin ), där de vänstra delarna av alla produktioner är enstaka icke -terminaler (objekt som betecknar någon essens av språket (till exempel: en formel, ett aritmetiskt uttryck, kommando) och som inte har en specifik symbolisk betydelse). Innebörden av termen "kontextfri" är att det är möjligt att tillämpa produktion på en icke-terminal, och dessutom oavsett sammanhanget för denna icke-terminala (i motsats till det allmänna fallet med obegränsad Chomsky-grammatik).
Ett språk som kan specificeras av en CFG kallas ett sammanhangsfritt språk eller CFL.
Faktum är att KS-grammatiken är en annan form av BNF .
COP-grammatik har mycket användning inom datavetenskap . De ställer in den grammatiska strukturen för de flesta programmeringsspråk , strukturerad data, etc. (se grammatisk analys )
För att tolka en COP-grammatik räcker det med en nedtryckningsautomat , för att tolka icke-COP-grammatik kan en komplett Turing-maskin behövas .
Det finns två olika klasser av igenkännare (automater för igenkänning) av CF-språk. Deras namn är relaterade till den ordning i vilken utdataträdet är byggt. Som regel läser alla igenkännare den inmatade teckensträngen från vänster till höger, eftersom en sådan notation förväntas för att skriva källkoden för program.
Top-down resolvers som genererar vänster utdatakedjor och bygger utdataträdet uppifrån och ner.
De använder modifieringar av algoritmen vid valet av alternativ. När du skapar dem används en metod som gör att du unikt kan välja ett och endast ett alternativ vid varje steg av MP-automaten (”utkastningssteget” i denna automat utförs alltid unikt).
Bottom-up resolvers som genererar kedjor av högerhänt utdata och bygger utdataträdet från botten till toppen.
Uppströms-igenkännare använder modifieringar av skift-veck-algoritmen (eller skift-veckning, vilket är samma). När du skapar dem används metoder som gör att du entydigt kan välja mellan att utföra ett "skifte" ("överföring") eller "faltning" vid varje steg i den utökade MP-automaten, och när faltning utförs kan du entydigt välja regeln genom vilken faltningen kommer att utföras. Algoritm "shift-convolution".
Exempel på SF-grammatik och deras motsvarande SF-språk:
Givet av formel
Denna grammatik anger språket för kapslade parenteser .
Denna grammatik definierar ett aritmetiskt uttryck som innehåller de enklaste aritmetiska operationerna på variabeln x. Om vi ersätter terminalen 'x' med icke-terminalen <tal> får vi en grammatik som specificerar ett aritmetiskt uttryck som består av addition, subtraktion, multiplikation och division på heltal.
Alla språk kan inte definieras med CF-grammatik. Det enklaste sättet att bevisa detta är som följer: COP-grammatiker bildar en räknebar mängd, medan kardinaliteten i mängden av alla språk är ett kontinuum . Ett konstruktivt bevis för samma faktum kan erhållas till exempel på grundval av att språket { a n b n c n | n ≥1} är inte kontextfri; det verkar dock inte finnas ett kort bevis för det senare påståendet: de publicerade bevisen förlitar sig på tillväxtsatsen för sammanhangsfria språk.
Trädadditionsgrammatiken generaliserar den sammanhangsfria grammatiken genom att den elementära enheten i slutledningsreglerna är träd, inte enskilda tecken.
Formella språk och formella grammatiker | |
---|---|
Allmänna begrepp | |
Typ 0 | |
Typ 1 |
|
Typ 2 | |
Typ 3 |
|
analysera |