# BNF

### Fra Wikipedia, den frie encyklopædi

Du har nye beskeder (forskel fra næstsidste redigering).

Backus-Naur form (BNF-form) er en metasyntax, dvs. en formel måde at beskrive formelle sprog.

BNF er en meget udbredt notation til at beskrive grammatikken af programmeringsprog. De fleste lærebøger om teorien bag programmering beskriver programmeringssprog i BNF.

I BNF bruges nogle få simple symboler, som alle kan skrives på en skrivemaskine. Der bruges følgende symboler:

- < > markerer et begreb, der ikke er beskrevet til bunds.
- | bruges som "eller".
- ::= læses som "består af".

Begreber, der er kendte, skrives som de er.

## [redigér] Overblik

BNF er opkaldt efter John Backus og danskeren Peter Naur. De var pionerer i datalogi med speciale i design af compilere. BNF har klare ligheder med Paninis regler for grammatik, og BNF bliver derfor også nogle gange omtalt som Panini-Backus-formen. BNF blev oprindeligt lavet for at kunne beskrive reglerne i ALGOL 60.

## [redigér] Eksempler

Beskrivelse af heltal.

    <heltal> ::= <positivt heltal> | <nul> | <negativt heltal>
    <positivt heltal> ::= <positivt ciffer> | <positivt heltal> <ciffer>
    <nul> ::= 0
    <negativt heltal> ::= - <positivt heltal>
    <ciffer> ::= <positivt ciffer> | <nul>
    <positivt ciffer> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Som det fremgår af eksemplet beskrives gentagelser rekursivt. I eksemplet er et positivt heltal beskrevet som et positivt ciffer eller et positivt heltal efterfulgt af et ciffer. Eksempelt viser også nogle af begrænsningerne i BNF. Opremsning af beslægtede værdier er omstændelig, og valgfrie elementer er ikke markerede som sådanne. EBNF løser disse problemer.

Også definitionen af BNF kan opskrives med BNF:

    <syntax> ::= <rule> | <rule> <syntax>
    <rule> ::= <opt-whitespace> "<" <rule-name> ">" <opt-whitespace> "::="
               <opt-whitespace> <expression> <line-end>
    <opt-whitespace> ::= " " <opt-whitespace> | ""
    <expression> ::= <list> | <list> "|" <expression>
    <line-end> ::= <opt-whitespace> <EOL> | <line-end> <line-end>
    <list> ::= <term> | <term> <opt-whitespace> <list>
    <term> ::= <literal> | "<" <rule-name> ">"
    <literal> ::= '"' <text> '"' | "'" <text> "'"

Dette understreger virkelig den rekursive natur.

| Denne it-artikel er kun påbegyndt. Hvis du ved mere om emnet, kan du hjælpe Wikipedia ved at udvide den.

Hentet fra "http://da.wikipedia.org../../../b/n/f/BNF_0890.html"

Kategorier: Påbegyndte it-artikler | Datalogi

##### Views

- Artikel
- Diskussion
- Nuværende version

##### deltagelse

- Velkommen
- Skribentforside
- Projekter
- Seneste ændringer
- Hjælp

##### organisation

- Donation
- Kontakt os

##### Søg

##### Andre sprog

- Deutsch
- English
- Español
- Français
- Hrvatski
- Magyar
- Íslenska
- Italiano
- 日本語
- ქართული
- 한국어
- Nederlands
- Polski
- Português
- Русский
- Svenska
- தமிழ்
- Türkçe
- Українська
- 中文