www.wikidata.de-de.nina.az
Die Backus Naur Form oder Backus Normalform kurz BNF ist eine kompakte formale Metasprache zur Darstellung kontextfreier Grammatiken Typ 2 Grammatiken in der Chomsky Hierarchie Hierzu zahlt die Syntax gangiger hoherer Programmiersprachen Sie wird auch fur die Notation von Befehlssatzen und Kommunikationsprotokollen verwendet Ursprunglich war sie nach John W Backus benannt spater wurde sie auf Anregung von Donald E Knuth auch nach Peter Naur benannt Beide waren Pioniere der Informatik die sich mit der Erstellung der Algol 60 Regeln und insbesondere mit der Kunst des Compilerbaus beschaftigten 1 2 Durch die Backus Naur Form im Algol 60 Report wurde es erstmals moglich die Syntax einer Programmiersprache formal exakt also ohne die Ungenauigkeiten naturlicher Sprachen darzustellen Es gibt viele Varianten der Backus Naur Form Die erweiterte Backus Naur Form EBNF ist eine gebrauchliche Variante die unter anderem eine kompakte Notation von sich wiederholenden Elementen erlaubt Fur Syntaxdefinitionen in Internetnormen wird uberwiegend die angereicherte Backus Naur Form ABNF verwendet Inhaltsverzeichnis 1 Grundlagen 2 BNF und kontextfreie Sprachen 3 BNF und Programmiersprachen 4 Beispiel 5 Modifikationen der BNF 6 Selbstdefinition einer modifizierten BNF 7 BNF und Parser Generatoren 8 Siehe auch 9 Literatur 10 Weblinks 11 EinzelnachweiseGrundlagen BearbeitenEin Programm besteht zunachst aus auf Bildschirm oder Papier sichtbaren Zeichen Daneben treten ggf noch Leerzeichen sowie Zeilen und Spaltentrennzeichen auf Diese Zeichen zahlen zu den Terminalsymbolen englisch terminal symbols oder kurz terminals da sie von einer BNF final erzeugt werden Die BNF verwendet zur Erzeugung der finalen Folge von Terminalsymbolen sogenannte Ableitungsregeln Produktionen Jede Ableitungsregel definiert ein Nichtterminalsymbol englisch nonterminal symbol oder kurz nonterminal zusammen mit Folgen von Terminal und Nichtterminalsymbolen durch die es bei einer Erzeugung ersetzt wird Oftmals dient dabei das Zeichen vertikaler Strich als Alternative die Zeichenfolge wird zur Kennzeichnung einer Definition verwendet und die Nichtterminalsymbole auch syntaktische Variablen genannt werden mit spitzen Klammern lt gt umschlossen Beispiel einer Definition eines Nichtterminalsymbols mit Alternativen an Terminalsymbolen lt Ziffer ausser Null gt 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 Nichtterminalsymbole definieren die bei einer Erzeugung durch eine Folge von Terminal und Nichtterminalsymbolen ersetzt werden Zum Beispiel lt Ziffer gt 0 lt Ziffer ausser Null gt lt Zweistellige Zahl gt lt Ziffer ausser Null gt lt Ziffer gt lt Zehn bis Neunzehn gt 1 lt Ziffer gt lt Zweiundvierzig gt 42 Eine Ziffer ist also eine 0 oder eine Ziffer ausser Null Eine zweistellige Zahl ist eine Ziffer ausser Null gefolgt von einer Ziffer Zweiundvierzig ist eine 4 gefolgt von einer 2 Wiederholungen mussen in der BNF uber Rekursionen definiert werden Eine Ableitungsregel kann dazu insbes auf der rechten Seite das Symbol auf der linken Seite enthalten etwa lt Ziffernfolge gt lt Ziffer gt lt Ziffer gt lt Ziffernfolge gt Lies Eine Ziffernfolge ist eine Ziffer oder eine Ziffer gefolgt von einer Ziffernfolge Eine Ziffernfolge passt also zu den Terminalsymbolfolgen 0 1 2 10 9870 8970635 usw jedoch auch zu 00 000 Soll eine positive Zahl nicht mit 0 beginnen leistet dies etwa die folgende Regel lt Positive Zahl gt lt Ziffer gt lt Ziffer ausser Null gt lt Ziffernfolge gt BNF und kontextfreie Sprachen BearbeitenDie Produktionsregeln der BNF nach Backus sind genau die in kontextfreien Grammatiken nach Chomsky erlaubten Regeln es ist also klar dass beide Formalismen dieselben Sprachen erzeugen Sie entstanden auch zu derselben Zeit namlich am Ende der 1950er Jahre Es gibt aber erst seit 1961 einen Hinweis auf den Zusammenhang namlich in einem Uberblicksartikel uber Metasprachen von Saul Gorn 3 dort noch als Zusammenhang von BNF mit allgemeinen Phrasenstrukturgrammatiken dargestellt und erst spater genauer auf kontextfreie Grammatiken beschrankt Im Folgejahr gab es einen Briefwechsel zwischen Gorn und Knuth uber dieses Thema in den Leserbriefen letters to the editor von Comm ACM Es ist plausibel anzunehmen dass Chomsky und Backus ihre Formalismen unabhangig voneinander entwickelten und Gorn der erste war der beide Ansatze kannte und so die Verbindung herstellen konnte 4 BNF und Programmiersprachen BearbeitenUm die Syntax von Programmiersprachen wie ALGOL Pascal C oder Java in der BNF darzustellen konnen deren Schlusselworter z B IF SWITCH zu den Terminalsymbolen gezahlt werden 5 Dies lasst es spater zu die finale Bezeichnung der Schlusselworter bei einer Implementierung eines Compilers willkurlich festzulegen Alternativ konnen die Schlusselworter uber Nichtterminalsymbole als Folgen von Terminalsymbolen z B Buchstabenfolgen festgelegt werden 1 In einem Compiler werden die Schlusselworter in einer Vorphase der lexikalischen Analyse erkannt und als besondere Zeichenfolgen weitergegeben Kommentare werden von der lexikalischen Analyse erkannt und oft entfernt zudem ggf auch weitere Elemente wie Gleitkommazahlen Bezeichner und initiale Zeichenketten Damit lasst sich die gesamte Syntax z B eines PASCAL Programms in BNF darstellen teilweise gekurzt lt Programm gt PROGRAM lt Bezeichner gt BEGIN lt Satzfolge gt END lt Bezeichner gt lt Buchstabe gt lt Restbezeichner gt lt Restbezeichner gt lt Buchstabe oder Ziffer gt lt Restbezeichner gt lt Buchstabe oder Ziffer gt lt Buchstabe gt lt Ziffer gt lt Buchstabe gt A B C D Z a b z lt Ziffer gt 0 1 2 3 4 5 6 7 8 9 lt Satzfolge gt Eine Syntaxanalyse besteht aus der Ruckfuhrung eines Programmtexts auf das Nichtterminalsymbol lt Programm gt Ein Programm muss also mit dem Wort PROGRAM beginnen auf das ein Bezeichner folgt Bezeichner beginnen mit einem Buchstaben gefolgt von beliebig vielen Buchstaben oder Ziffern Die Ruckfuhrung auf lt Programm gt gelingt bei PROGRAM Ggt BEGIN END PROGRAM DiesisteinlangerBezeichnermit123 BEGIN END nicht jedoch bei Ggt BEGIN END beginnt nicht mit PROGRAM PROGRAM 123 BEGIN END 123 ist kein Bezeichner Bezeichner mussen mit einem Buchstaben beginnen Beispiel BearbeitenHier eine BNF fur eine deutsche Postanschrift lt Post Anschrift gt lt Personenteil gt lt Strasse gt lt Stadt gt lt Personenteil gt lt Titelteil gt lt Namensteil gt lt EOL gt lt Titelteil gt lt Titel gt lt Namensteil gt lt Vornamenteil gt lt Nachname gt lt Vornamenteil gt lt Namensteil gt lt Vornamenteil gt lt Vorname gt lt Initial gt lt Strasse gt lt Strassenname gt lt Hausnummer gt lt EOL gt lt Stadt gt lt Postleitzahl gt lt Stadtname gt lt EOL gt Die Ausformulierung lautet Eine Postanschrift besteht aus einem Personenteil gefolgt von einer Strasse gefolgt von der Stadt Der Personenteil besteht aus einem Titelteil und einem Namensteil gefolgt von einem Zeilenende gekennzeichnet durch lt EOL gt Der Titelteil besteht aus einem Titel oder ist leer Der Namensteil besteht aus einem Vornamensteil einem Nachnamen oder aus einem Vornamensteil 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 Der Vornamenteil besteht aus einem Vornamen oder einem Initial auf den ein Punkt folgt Eine Strasse besteht aus einem Strassenname 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 Zusammenhang abhangen oder anderweitig spezifiziert sind Oft wird der Titel in eckige Klammern gestellt der Titelteil entfallt Dies bedeutet dass der Titel leer sein darf Option lt Personenteil gt lt Titel gt lt Namensteil gt lt EOL gt Dieses Beispiel ist keine reine Form aus dem Algol 60 Report Die eckigen Klammern stellen eine Option dar Sie wurden einige Jahre spater in der Definition von IBMs PL I eingefuhrt sind aber allgemein nur in EBNF anerkannt Option lt Zahl gt lt Positive Zahl gt Das Minuszeichen ist optional Die Definition ist aquivalent zu lt Zahl gt lt Positive Zahl gt lt Positive Zahl gt Eine Zahl ist eine positive Zahl oder ein Minuszeichen gefolgt von einer positiven Zahl Modifikationen der BNF Bearbeiten nbsp Syntaxdiagramme der modifizierten BNFDie Alternative und die Sequenz sind zur Darstellung der BNF grundsatzlich geeignet Allerdings lassen sich die Zeichen nicht von den BNF Zeichen unterscheiden Oft konnen auch Zeichen wie Punkt oder Minus nur schwer erkannt werden Die BNF wird daher in der Regel etwas modifiziert und erganzt Keine spitzen Klammern lt gt fur Nichtterminale Zeichen als Terminalsymbole werden in Anfuhrungszeichen gesetzt 0 1 Nichtterminalsymbole in Kleinbuchstaben Schlusselworter in Grossbuchstaben Nur statt Ein Punkt am Ende einer Regel Mehrzeilige Regeln sind moglich ziffer 0 1 2 3 9 zifferaussernull 1 2 3 9 ziffernfolge ziffer ziffer ziffernfolge zahl zifferaussernull ziffernfolge 0 programm PROGRAM bezeichner BEGIN satzfolge END Die Option wird manchmal nicht mit eckigen Klammern sondern durch ein angefugtes Fragezeichen dargestellt Die Wiederholung durch Rekursion ist oft umstandlich Optionen werden durch ein angefugtes Fragezeichen dargestellt Wiederholungen ein oder mehrfach werden durch ein angefugtes Pluszeichen dargestellt Optionale Wiederholungen keinmal ein oder mehrfach werden durch einen angefugten Stern dargestellt Klammern dienen zur Gruppierungziffernfolge ziffer zahl zifferaussernull ziffernfolge 0 bezeichner buchstabe buchstabe ziffer Die erweiterte Backus Naur Form geht andere Wege Sie verwendet eckige Klammern fur die Option jedoch geschweifte Klammern fur die optionale Wiederholung Terminale und Nichtterminale werden nicht streng unterschieden Hier wurde das obenstehende Beispiel so dargestellt Ziffernfolge Ziffer Ziffer Zahl ZifferAusserNull Ziffernfolge 0 Bezeichner Buchstabe Buchstabe Ziffer Selbstdefinition einer modifizierten BNF BearbeitenEine 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 Grossbuchstabe A B Z Kleinbuchstabe a b z Sichtbareszeichen alle sichtbaren Zeichen Anf Bei dieser Version werden Schlusselworter als Grossbuchstaben dargestellt Nichtterminale als Kleinbuchstaben Wiederholungen mussen uber Rekursionen definiert werden Davon wird in der eigenen Definition auch Gebrauch gemacht modifiziertebnf elementliste nichtterminal schlusselwort BNF und Parser Generatoren BearbeitenManche Parsergeneratoren verwenden eine eigene Form der BNF als Eingabe und generieren hieraus einen Parser fur die zugrundeliegende Programmiersprache Das dem Betriebssystem Unix beigegebene yacc ist so ein Programm Es generiert einen tabellengesteuerten Parser aus einer BNF Definition wobei nur Produktionen statt und Alternativen zulassig sind Dies ist notwendig da yacc eine S Attribution ermoglicht einem optionalen Teil jedoch kein sinnvoller semantischer Typ des Attributs zugeordnet werden kann Als Ausgabe erhalt man ein Unterprogramm in der Programmiersprache C Die zugrundeliegende Grammatik muss dabei die LALR Eigenschaft erfullen Siehe auch BearbeitenFormale Sprache SyntaxbaumLiteratur BearbeitenDonald E Knuth Backus Normal Form vs Backus Naur Form In Communications of the ACM Band 7 Nr 12 1964 S 735 737 doi 10 1145 355588 365140 Weblinks Bearbeiten nbsp Commons Backus Naur Form Sammlung von Bildern Videos und Audiodateien Revised Report on the Algorithmic Language Algol 60 englisch RFC 5234 Augmented BNF for Syntax Specifications ABNF Januar 2008 englisch Einzelnachweise Bearbeiten a b J W Backus The syntax and semantics of the proposed international algebraic language of the Zurich ACM GAMM conference Hrsg International Business Machines Corp New York USA 1959 Syntax of IAL englisch John Backus Programming in America in the 1950s Some Personal Impressions Hrsg IBM research laboratory San Jose California 9 Emil Post and Syntax Description englisch Saul Gorn Specification languages for mechanical languages and their processors a baker s dozen In Communications of the ACM 4 1961 S 336 371 Anton Nijholt Computers and Languages North Holland Amsterdam 1988 ISBN 0 444 70463 9 S 207 210 J W Backus F L Bauer J Green C Katz J McCarthy P Naur A J Perlis H Rutishauser K Samelson B Vauquois J H Wegstein A van Wijngaarden M Woodger Revised Report on the Algorithmic Language Algol 60 Hrsg International Federation of Information Processing 1962 2 1 Letters englisch nbsp Dieser Artikel wurde am 3 Marz 2006 in dieser Version in die Liste der lesenswerten Artikel aufgenommen Abgerufen von https de wikipedia org w index php title Backus Naur Form amp oldid 234068039