En linjär grammatik är en kontextfri grammatik så att den högra sidan av någon av dess slutledningsregler innehåller högst en icke-terminal.
Ett linjärt språk är ett språk som genereras av någon linjär grammatik.
Ett enkelt exempel på en linjär grammatik är en med en uppsättning icke-terminaler , ett alfabet , en initial icke-terminal och inferensregler
Denna grammatik genererar ett oregelbundet språk .
Det finns speciella typer av linjär grammatik:
Var och en av dessa typer beskriver individuellt exakt klassen av vanliga språk . En vanlig grammatik är en grammatik som är antingen vänsterlinjär eller högerlinjär.
En annan speciell typ av linjär grammatik är:
Genom att lägga till nya icke-terminaler kan all linjär grammatik reduceras till den form som beskrivs ovan utan att ändra språket som genereras av grammatiken. Det kan till exempel föras till formuläret
Således genererar linjära grammatiker av detta slag samma klass av språk som godtyckliga linjära grammatiker.
Alla vanliga språk är linjära. Det klassiska exemplet på ett linjärt men inte reguljärt språk är språket som beskrivs ovan . Alla linjära språk är kontextfria . Ett exempel på ett sammanhangsfritt men icke-linjärt språk är språket Dyck , som består av regelbundna parentessekvenser. Således är vanliga språk deras egen delmängd av linjära språk, som i sin tur är deras egen delmängd av sammanhangsfria språk.
Medan alla vanliga linjära språk är deterministiska , finns det icke-deterministiska linjära språk. Ett exempel på ett sådant språk är språket för palindromer med jämn längd över alfabetet , vilket ges av en linjär grammatik . Ett godtyckligt ord för ett givet språk kan inte analyseras av en pushdown-automat utan att läsa alla dess symboler, så språket är icke-deterministiskt [1] . Problemet med att kontrollera om ett givet sammanhangsfritt språk är linjärt är olösligt [2] .