Backus form - Naur (abbr. BNF , Backus - Naura form ) er et formelt syntaksbeskrivelsessystem , hvor nogle syntaktiske kategorier er sekventielt defineret gennem andre kategorier. BNF bruges til at beskrive kontekstfri formelle grammatikker . Der er en udvidet form Backus - Naura , der kun adskiller sig i mere rummelige designs.
Bruges til at beskrive syntaksen af programmeringssprog, data, protokoller (f.eks. i RFC -dokumenter ) osv. (både grammatik og almindeligt ordforråd, da almindelige grammatikker er en delmængde af kontekstfrie ).
Terminologien i denne artikel kan afvige fra den traditionelle.
BNF-konstruktionen definerer et begrænset antal symboler ( ikke -terminaler ). Derudover definerer den reglerne for udskiftning af et tegn med en sekvens af bogstaver (terminaler) og symboler. Processen med at opnå en bogstavkæde kan defineres i etaper: i begyndelsen er der et tegn (tegn er normalt omgivet af vinkelparenteser, og deres navn indeholder ingen information). Så er dette symbol erstattet af en eller anden række af bogstaver og symboler, ifølge en af reglerne. Derefter gentages processen (ved hvert trin erstattes et af tegnene med en sekvens ifølge reglen). Til sidst opnås en kæde, der består af bogstaver og ikke indeholder symboler. Det betyder, at den resulterende streng kan udledes af starttegnet.
BNF-konstruktionen består af flere sætninger af formen
<tegn, der skal defineres> ::= <sidste1> | <last.2> | . . . | <last.n>beskriver reglerne. En sådan regel betyder, at et tegn <определяемый символ>kan erstattes af en af sekvenserne <посл.n>. Definitionens tegn ser normalt ud som ::=eller →, men andre variationer er mulige.
Nogle specialtegn, såsom <пусто>, betyder en eller anden sekvens (i dette tilfælde en tom).
Dette er en simpel konstruktion, der kun består af én regel, der siger, at et tegn <правпосл>kan erstattes enten af et tomt mellemrum eller af det samme tegn <правпосл>omgivet af parenteser, eller af to tegn i <правпосл>træk.
Beskrivelse ifaf PASCAL-sprogoperatøren i udvidet BNF:
<betinget operator if> ::= hvis <boolesk udtryk> derefter <operator> [else <operator>] <boolesk udtryk> ::= "IKKE" <boolesk udtryk> | <boolesk udtryk> <logisk operation> <boolesk udtryk> | <udtryk> <sammenligningsoperator> <udtryk> <logisk operation> ::= "ELLER" | "OG" <udtryk> ::= <variabel> | <streng> | <karakter> <sammenligningsoperation> ::= "=" | " < " | " > " …