Beschreibung der Syntax durch EBNF
Bisher haben wir die Syntax (also Struktur) unserer einfachen Programmiersprache mit einfachen Sätzen beschrieben. Das reicht aus, solange Autor und Leser im Kopf dieselbe Vorstellung von syntaktisch korrekten programmen (bislang: mathematischen Termen) haben. Zur Beschreibung umfangreicherer Programmiersprachen verwendet man eine eigene Beschreibungssprache, die EBNF (Erweiterte Backus Naur-Form). Es macht keinen Sinn, sie hier genauer zu beschreiben, da sie im Wikipedia-Artikel sehr gut und genau erklärt wird: Erweiterte Backus-Naur-Form (Wikipedia)
Die EBNF unserer bisherigen Programmiersprache sieht so aus:
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; Buchstabe = "A" | "B" | "C" | "D" | … | "Z" | "a" | "b" | … | "z" ; Zahl = Ziffer { Ziffer | "." } ; Text = Buchstabe { Buchstabe | Ziffer | "_" } ; Term = "(" Summe ")" | Zahl | Text | "-" Term ; Produkt = Term | Term "*" Term ; Quotient = Term | Term "/" Term ; ProduktQuotient = Produkt | Quotient ; Summe = ProduktQuotient | ProduktQuotient "+" ProduktQuotient ; Differenz = ProduktQuotient | ProduktQuotient "-" ProduktQuotient ;
Natürlich ist die Definition von Zahl
nicht realistisch, da sie beispielsweise erlaubt, dass Kommata mehrfach vorkommen können. Aber zum Verstehen der Thematik reicht das völlig aus. Realistische EBNFs machen den Compiler nur länger aber nicht komplizierter.
Eine in EBNF beschriebene Grammatik der Programmiersprache Java findet man beispielsweise hier: http://markuskaupp.de/programmieren1_03/bnf2.pdf
Natürlich beschreibt die Grammatik nicht die vollständige Programmierpsrache. Sie legt nur fest, was als syntaktisch richtig akzeptiert wird. Wie die Programmiersprache zu deuten ist (Semantik der Sprache) muss ergänzend festgelegt werden. Eine Spezifikation der Semantik von Java findet sich hier: Java Language Specification
Jetzt werden wir die Programmiersprache deutlich erweitern, so dass sie auch Zuweisungen, Wiederholungen und eine einfache Print-Ausgabe besitzt.