wer ist, was ist, wo ist, wann war, was war - Lexikon / Chronik / Biografie / Wissen - Backus-Naur-Form


Werbung

Produkte / Services :|: Chronik CD :|: als Startseite | zu den | empfehlen :|: Impressum
Lexika @ InfoBitte.de :|: Universal-Lexikon | WeltKunst | Geteiltes Deutschland | Zweiter Weltkrieg
WeltChronik.de :|: Welt | Deutschland | Kultur/Kunst/Technik :|: BildDatenBank :|: Biografien

Navigation

WeltChronik
Deutsche Chronik
KulturChronik
Biografien
Bilddatenbank
Kalenderblatt
Epochen
Lexika @ InfoBitte.de
Produkte

Suchfunktionen
Chronik-Jahr direkt

Nur Zahl eingeben
Bereich: '0'-'2001'
PARTNER
Ahnenforschung

Quellen für die Schule

FREE 4 WebMasters

Wir haben eine ganze Palette kostenloser Angebote von uns
für WebMaster und HomePage Besitzer aufbereitet

Holen Sie sich hier ab

was Sie gerne einsetzen würden
Suchfunktionen, Kalenderblatt, uam
für Ihre WebSite



Backus-Naur-Form

ein InfoBitte / WeltChronik
Sach-Artikel (Enzyklopädie / Lexikon)

Entwickelt von ICA-D aus der XML-Version der deutschen WikiPedia
© 2004/2005 ff by de.wikipedia.org, teilw. by ICA-D
blättern» voriger Artikel | Hauptseite | nächster Artikel «blättern

Die Backus-Naur-Form oder Backus-Normalform, kurz BNF ist eine kompakte formale Metasyntax, die benutzt wird, um kontextfreie Grammatiken (= Typ-2-Grammatiken, vgl. Chomsky-Hierarchie) darzustellen. Hierzu zählt die Syntax gängiger höherer Programmiersprachen. Sie wird auch für die Notation von Befehlssätzen und Kommunikationsprotokollen verwendet.


Ursprünglich war sie nach John Backus benannt, später wurde sie (auf Anregung von Donald Knuth) auch nach Peter Naur benannt. Beide waren Informatikpioniere, die sich mit der Erstellung der Algol 60 Regeln und insbesondere mit der Kunst des Compilerbaus beschäftigten. Durch die Backus-Naur-Form im Algol 60-Report wurde es erstmals möglich, die Syntax einer Programmiersprache formal exakt, also ohne die Ungenauigkeiten natürlicher Sprachen, darzustellen.


Es gibt viele Varianten der Backus-Naur-Form. Die erweiterte Backus-Naur-Form (EBNF) ist eine gebräuchliche Variante, die unter anderem eine kompakte Notation von sich wiederholenden Elementen erlaubt.


Inhaltsverzeichnis


1 Grundlagen

2 BNF und Programmiersprachen

3 Beispiel

4 Modifikationen der BNF

5 Selbstdefinition einer (modifzierten) BNF

6 BNF und Parser-Generatoren


Grundlagen

Ein Programm besteht zunächst aus sichtbaren, also auf der Tastatur vorhandenen, Zeichen. Daneben treten noch Leerzeichen und Zeilentrenner auf. Die sichtbaren Zeichen werden zu den Terminalsymbolen (engl. terminals) gerechnet.


BNF verwendet so genannte Ableitungsregeln, in denen Nicht-Terminalsymbole (engl. nonterminals) definiert werden. Dabei dient das Zeichen | (vertikaler Strich) als Alternative, die Zeichenfolge ::= wird zur Definition verwendet, zum Beispiel:


Alternative:


<Ziffer ausser Null> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

eine Ziffer ausser Null ist also entweder eine 1 oder eine 2 oder eine 3 usw. Es lassen sich auch Terminalfolgen definieren, also eine Sequenz. Als Elemente dürfen Terminalsymbole und Nichtterminalsymbole auftreten:


Sequenz:


<Ziffer> ::= 0 | <Ziffer ausser Null>
<Zweistellige Zahl> ::= <Ziffer ausser Null> <Ziffer>
<Zehn bis Neunzehn> ::= 1 <Ziffer>
<Zweiundvierzig> ::= 4 2

Eine Ziffer ist also entweder eine 0 oder eine 1 oder eine 2 usw. Eine zweistellige Zahl ist eine Ziffer ausser Null gefolgt von einer Ziffer. Zweiundvierzig ist eine 4 gefolgt von einer 2.


Eine positive Zahl mit beliebig vielen Stellen kann man über eine Rekursion erzeugen:


<Positive Zahl> = <Ziffer> | <Ziffer ausser Null> <Positive Zahl>

Eine positive Zahl ist also eine Ziffer oder eine Ziffer ausser Null gefolgt von einer positiven Zahl. Dazu passen also die Folgen 0, 1, 2,..._,10, 11,..._ 99, 100,..., 100000,..._, 45691283284.


BNF und Programmiersprachen

Um die Syntax von Programmiersprachen wie ALGOL, Pascal, Java in BNF darzustellen, muss man noch die Schlüsselwörter (IF, SWITCH) zu den Terminalsymbolen rechnen. In einem Compiler werden sie von einer Vorphase, der lexikalischen Analyse erkannt und als besondere Zeichen weitergegeben. Auch Kommentare werden von der lexikalischen Analyse erkannt, manchmal auch weitere Elemente wie Fliesskommazahlen, Bezeichner und Zeichenketten.


Damit lässt sich dann die gesamte Syntax eines Programms in BNF darstellen:


<Programm> = 'PROGRAM' <Bezeichner> 'BEGIN' <Satzfolge> 'END' .
<Bezeichner> = <Buchstabe> | <Restbezeichner>
<Restbezeichner> = | <Restbezeichner> <Buchstabe oder Ziffer>
<Buchstabe oder Ziffer> = <Buchstabe> | <Ziffer>
<Buchstabe> = A | B | C | D | ... | Z | a | b | ... | z *)
<Ziffer> = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<Satzfolge> = ...
...


*) gekürzt

Eine Syntaxanalyse besteht aus der Rückführung eines Programmtexts auf das Nichterminalsymbol <Programm>.


Ein Programm muss also mit dem Wort PROGRAM beginnen, auf das ein Bezeichner folgt. Bezeichner beginnen mit einen Buchstaben, gefolgt von beliebig vielen Buchstaben oder Ziffern.


Die Rückführung auf <Programm> gelingt bei


  PROGRAM Ggt BEGIN ... END.

  PROGRAM DiesisteinlangerBezeichnertmit123 BEGIN ... END .

nicht jedoch bei


  Ggt BEGIN ... END. (beginnt nicht mit PROGRAM)

  PROGRAM 123 BEGIN ... END. (123 ist kein Bezeichner)

Beispiel

Hier eine BNF für eine deutsche Postanschrift:


<Post-Anschrift> ::= <Personenteil> <Straße> <Stadt>
<Personenteil> ::= [ <Titel> ] <Namensteil> <EOL>
<Vornamenteil> ::= <Vorname> | <Initial> "."
<Namensteil> ::= <Nachname> | <Vornamenteil> <Namensteil>
<Straße> ::= <Straßenname> <Hausnummer> <EOL>
<Stadt> ::= <Postleitzahl> <Stadtname> <EOL>

(Definition von Straßenname, Hausnummer etc. fehlen)


Die Ausformulierung lautet:


  • Ein Postanschrift besteht aus einem Personenteil, gefolgt von einer Straße, gefolgt von der Stadt.
  • Der Personenteil besteht aus einem optionalen Titel und einem Namensteil, gefolgt von einem Zeilenende.
  • Der Vornamenteil besteht aus einem Vornamen oder einem Initial, auf den dann ein Punkt folgt.
  • Der Namensteil besteht aus einem Vorname-Teil, einem Nachname oder aus einem Vornamenteil und wiederum aus einem Namensteil. (Diese Regel zeigt die Benutzung von Rekursion in BNFs und stellt den Fall dar, dass eine Person mehrere Vornamen und/oder Initialen besitzt.)
  • Eine Straße besteht aus einem Straßenname, gefolgt von einer Hausnummer, gefolgt von einem Zeilenende.
  • Eine Stadt besteht aus einer Postleitzahl, gefolgt von einem Stadtname, gefolgt von einem Zeilenende.


Man beachte, dass einiges (wie die Postleitzahl oder Hausnummer) nicht weiter spezifiziert ist. Es wird angenommen, dass diese lexikalischen Details vom Kontext abhängen oder anderweitig spezifiziert sind.


Dieses Beispiel ist keine reine Form aus dem "ALGOL 60 report". Die eckigen Klammern "[ ]" stellen eine Option dar. Sie wurden einige Jahre später in der Definition von IBMs PL/1 eingeführt, sind aber allgemein anerkannt.


Option


Das Minuszeichen ist optional. Die Definition ist äquivalent zu


<Zahl> = <Positive Zahl> | - <Positive Zahl>

Eine Zahl ist eine positive Zahl, oder ein Minuszeichen, gefolgt von einer positiven Zahl.


Modifikationen der BNF

Die Alternative und die Sequenz sind zur Darstellung der BNF grundsätzlich geeignet. Allerdings lassen sich die Zeichen |, [, ] nicht von den BNF-Zeichen unterscheiden. Oft erkennt man auch Zeichen wie Punkt oder Minus nur schwer.


Die BNF wird daher in der Regel etwas modifiziert und ergänzt:


  • Keine spitzen Klammern "< >" für Nichtterminale.
  • Einbuchstabige Terminalsymbole werden in Anführungszeichen gesetzt ("0" | "1"..._)
  • Nichtterminalsymbole in Kleinbuchstaben.
  • Schlüsselwörter in Großbuchstaben.
  • Nur = statt ::=.
  • Ein Punkt am Ende einer Regel. Mehrzeilige Regeln sind möglich.


ziffer = "0" | "1" | "2" | "3" | ... | "9" .
positivezahl = ziffer | ziffer positivezahl .
zahl = [ "-" ] positivezahl .
programm = PROGRAM bezeichner
BEGIN satzfolge END "." .

Die Option wird manchmal nicht mit eckigen Klammern, sondern durch einen angefügtes Fragezeichen dargestellt. Die Wiederholung durch Rekursion ist oft umständlich:


  • Optionen werden durch ein angefügtes Fragezeichen dargestellt.
  • Wiederholungen (ein- oder mehrfach) werden durch ein angefügtes Pluszeichen dargestellt.
  • Optionale Wiederholungen (keinmal oder mehrfach) werden durch einen angefügten Stern dargestellt.
  • Klammern dienen zur Gruppierung


positivezahl = ziffer+ .
zahl = ( "-" )? positivezahl .
bezeichner = buchstabe ( buchstabe | ziffer )* .

Die erweiterte Backus-Naur-Form geht andere Wege. Sie verwendet eckige Klammern "[ ]" für die Option, jedoch geschweifte Klammenr "{ }" für die optionale Wiederholung.


Selbstdefinition einer (modifzierten) BNF

Eine modifizierte BNF kann sich selbst definieren:


modifiziertebnf = | satz modifiziertebnf .
satz = nichtterminal "=" elementliste "." .
elementliste = | element elementliste .
element = terminal | nichtterminal .
nichtterminal = kleinbuchstabe | kleinbuchstabe nichtterminal .
terminal = schluesselwort | anf sichtbareszeichen anf .
schluesselwort = grossbuchstabe | grossbuchstabe schluesselwort .
anf = """ .
grossbuchstabe = "A" | "B" | ... | "Z" .
kleinbuchstabe = "a" | "b" | ... | "z" .
sichtbareszeichen = "!" | "$" | "%" | ... (alle sichtbaren Zeichen) .

Man erkennt, dass bei dieser Version Schlüsselwörter als Großbuchstaben dargestellt werden, Nichtterminale als Kleinbuchstaben. Wiederholungen müssen über Rekursionen definiert werden. Davon wird in der eigenen Definition auch Gebrauch gemacht (modifiziertebnf, elementliste, nichtterminal, schlüsselwort).


BNF und Parser-Generatoren

Manche Parser-Generatoren verwenden eine eigene Form der BNF als Eingabe und generieren hieraus einen Parser für die zugrundegelegte Programmiersprache.


Das in dem Betriebssystem Unix enthaltene Programm yacc (Yet Another Compiler Compiler) ist so ein Programm. Es generiert einen tabellengesteuerten Parser aus einer BNF-Definition. Als Ausgabe erhält man ein Unterprogramm in der Programmiersprache C. Die zugrundegelegte Sprache muss dabei bestimmten Einschränkungen genügen, da der Parser als endlicher Automat realisiert ist (sogenannte LR(1)-Grammatik).

Siehe auch: Formales System (Informatik), Syntaxdiagramm
blättern» voriger Artikel | Hauptseite | nächster Artikel «blättern

Dieser Beitrag ist aus der XML-Version der deutschen WikiPedia® entwickelt worden und unterliegt inhaltlich den GNU FDL-Lizenzbestimmungen. Linkziele außerhalb der wikipedia-Inhalte unterliegen den Urheberrechten der jeweiligen Anbieter




Wörterbuch


Produkte
2000 Jahre
Chronik CD-ROM


Kalenderblatt in
Schmuckblatt
Ausführung


Geburtstags-Bios

Suchen/Google-Ads
Kalenderblatt
druckfertig
( DirectDownloads )
Kalenderblätter
druckfertig aufbereitet für Schmuckblätter
zum Selbstdrucken

im Word DOC6/RTF Format, je Euro 5
über Click&Buy
JAN | FEB | MÄRZ
APRIL | MAI | JUNI
JULI | AUG | SEPT
OKT | NOV | DEZ

Das Geschenk für jeden Anlass, nicht nur bei 'runden' Jubiläen
Andere Einzeltage
oder Zahlungsarten

bitte HIER bestellen


© 2000 ff by ICA-D, D-76751 Jockgrim, Germany
Verantwortlich im Sinne des Presse- und Multimedia-Rechts: Dipl.-Ing. Rainer Detering, Waidweg 18, 76189 Karlsruhe


| Immer | Unsere | InfoBitte weiterempfehlen
KALENDERBLATT von HEUTE | SUCH-Funktionen ALLE und nach BEREICHEN | Startseite
Welt-Chronik | Kunst-, Kultur-, Technik-Geschichte | Deutsche Chronik | 2000 Biografien | Bild-Datenbank
Gesetzestexte | SkateGuide | Online Jigsaw Puzzles | GeschenkTip | Produkte, Services, Impressum



*NEU* bei InfoBitte *NEU*



die deutsche WikiPedia
bei InfoBitte.de mit
650,000 Querverweisen zu
2000 Jahre Chronik



InfoBitte
Portal zu Portalen
Hauptseite


Suchfunktionen

Wissen, Biografien, Geschichte
besser gezielt suchen mit
domain-Filterung

die Links führen im neuen Fenster
zu den jeweiligen Hauptseiten,
das Anklicken eines Buttons zur
Filterung für die Google-Suche



Google
Lexika @ InfoBitte.de

ib InfoBitte.de (alle Lexika)
ib Universal-/Hand-Lexikon
die WikiPedia @ InfoBitte
ib L. WeltKunstGeschichte
ib L. Geteiltes Deutschland
ib L. Zweiter Weltkrieg

2000 Jahre Chronik

WeltChronik.de (Texte)
  
WeltChronik auf CDROM
deutsche Geschichte
Kultur-/TechnikGeschichte
WeltChronik Bilder
Chronik Biografien

Google
2000 Jahre Chronik
offline auf CDROM

Hier Kaufen


WeltChronik Jahr...
(eigene Suchfunktion)

Nur Zahl eingeben
Bereich: '0'-'2001'





Diese Web Site verdient ihr Geld durch Produktverkäufe (CD-ROM, downloads) und in erster Linie durch Anzeigen. Wenn Sie als Webmaster zuverlässige Partner suchen für Ihr eigenes Anzeigenschäft, dürfen Sie sich gerne auf unsere Empfehlungen stützen:
z.B.: GigaCash & ProfiWin