Formell grammatik eller bara grammatik i teorin om formella språk är ett sätt att beskriva ett formellt språk, det vill säga att välja en viss delmängd från uppsättningen av alla ord i något ändligt alfabet . Det finns generativa och igenkännande (eller analytiska ) grammatiker - den första sätter reglerna med vilka du kan bygga vilket ord som helst i språket, och den andra låter dig avgöra från ett givet ord om det ingår i språket eller inte.
Orden för språket som ges av grammatiken är alla sekvenser av terminaler som matas ut (genereras) från den initiala icke-terminalen enligt reglerna för utdata.
För att ställa in grammatiken måste du ställa in alfabeten för terminaler och icke-terminaler, en uppsättning slutledningsregler, och även välja den första i uppsättningen av icke-terminaler.
Så grammatik definieras av följande egenskaper:
En utgång är en sekvens av linjer som består av terminaler och icke-terminaler, där den första raden är en linje som består av en startande icke-terminal, och varje efterföljande rad erhålls från den föregående genom att ersätta någon delsträng enligt en (valfri) av reglerna. Den sista strängen är en sträng som helt består av terminaler och är därför ett ord i språket.
Förekomsten av en härledning för ett visst ord är ett kriterium för dess tillhörighet till det språk som definieras av den givna grammatiken.
Enligt Chomsky-hierarkin är grammatik indelad i 4 typer, var och en av dem är en mer begränsad delmängd av den föregående (men också lättare att analysera):
Dessutom finns det:
Tänk på ett enkelt språk som definierar en begränsad delmängd av aritmetiska formler som består av naturliga tal , parenteser och aritmetiska tecken. Det är värt att notera att här i varje regel på vänster sida av pilen finns det bara en icke-terminal symbol. Sådana grammatiker kallas sammanhangsfria .
Terminalalfabet:
= {'0','1','2','3','4','5','6','7','8','9','+','-', '*','/','(',')'}Icke-terminalt alfabet:
{ FORMEL, TECKN, NUMMER, NUMMER }Regler:
1. FORMEL FORMEL TECKN FORMEL (en formel har två formler förbundna med ett tecken) 2. FORMELNUMMER ( formeln är ett tal) 3. FORMEL ( FORMEL ) (en formel är en formel inom parentes) 4. TECKNA + | - | * | / (tecknet är plus eller minus, eller multiplicera eller dividera) 5. NUMMERSIFRA ( ett nummer är ett tal) 6. NUMMER NUMMER SIFFROR (ett nummer är ett tal och ett tal) 7. NUMMER 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (siffran är 0 eller 1, eller ... 9)Initial icke-terminal:
FORMELSlutsats :
Låt oss härleda formeln (12+5) med hjälp av de angivna slutledningsreglerna. För tydlighetens skull visas sidorna av varje utbyte parvis, i varje par är den ersatta delen understruken.
FORMEL (FORMEL) ( FORMEL ) ( FORMELTECKNFORMEL ) (FORMELTECKNFORMEL ) ( FORMEL + FORMEL) ( FORMEL + FORMEL ) ( FORMEL + TAL ) ( FORMEL + TAL ) ( FORMEL + TAL ) ( FORMEL + TAL ) ( FORMEL + 5 ) ( FORMEL + 5) ( NUMMER + 5) ( NUMMER + 5) ( NUMMER + 5) ( NUMMER SIFFROR + 5) ( SIFFROR + 5) ( DIGIT DIGIT + 5) ( 1 DIGIT + 5) (1 SIFFRA + 5) (1 2 + 5)
Generativ grammatik är inte den enda typen av grammatik, men de är vanligast i programmeringsapplikationer. Till skillnad från generativ grammatik definierar analytisk (igenkännande) grammatik en algoritm som låter dig avgöra om ett givet ord tillhör språket. Till exempel kan vilket vanligt språk som helst kännas igen med hjälp av en grammatik som definieras av en tillståndsmaskin , och vilken kontextfri grammatik som helst kan kännas igen med en stackbaserad automat . Om ett ord tillhör ett språk, konstruerar en sådan automat dess utdata i en explicit form, vilket gör det möjligt att analysera semantiken i detta ord.
Formella språk och formella grammatiker | |
---|---|
Allmänna begrepp | |
Typ 0 | |
Typ 1 |
|
Typ 2 | |
Typ 3 |
|
analysera |