Kapitel 2: Methoden zur Beschreibung von Syntax

Ähnliche Dokumente
Übersicht: Inhalt und Ziele. Kapitel 2: Methoden zur Beschreibung von Syntax. Aufbau von Programmen. Syntax von Programmiersprachen

Kapitel 2. Methoden zur Beschreibung von Syntax

Syntax von Programmiersprachen

Syntax von Programmiersprachen

Kapitel 2. Methoden zur Beschreibung von Syntax

Syntax von Programmiersprachen

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

Alphabet, formale Sprache

Kapitel IV Formale Sprachen und Grammatiken

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

Sprachen sind durch folgenden Aufbau gekennzeichnet:

7. Syntax: Grammatiken, EBNF

2.2 Syntax, Semantik und Simulation

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

Kapitel 5: Syntaxdiagramme und Grammatikregeln

Einführung in die Informatik. Programming Languages

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 18/19. Syntax. Dr. Philipp Wendler

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

3 Syntax von Programmiersprachen

Inhalt Kapitel 11: Formale Syntax und Semantik

3 Syntax von Programmiersprachen

3.1 Reservierte Wörter

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Einführung in die Informatik. Programming Languages

Grammatiken. Grammatiken sind regelbasierte Kalküle zur Konstruktion von Systemen und Sprachen Überprüfung von Systemen und Sprachen

Syntax. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Syntax. Philipp Wendler

Syntax. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik

Einführung in die Programmierung I. 1.0 EBNF 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Programmierung für NF. Übung

Sprachanalyse. Fachseminar WS 08/09 Dozent: Prof. Dr. Helmut Weber Referentin: Nadia Douiri

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

7. Formale Sprachen und Grammatiken

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.

Abschnitt 4: Daten und Algorithmen

Daten und Algorithmen

Grundbegriffe. Grammatiken

Von der Chomsky-Hierarchie

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

2.1 Grundlagen: Kontextfreie Grammatiken

Definition 4 (Operationen auf Sprachen) Beispiel 5. Seien A, B Σ zwei (formale) Sprachen. Konkatenation: AB = {uv ; u A, v B} A + = n 1 An

Mehrdeutige Grammatiken

3.4 Struktur von Programmen

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Kontextfreie Sprachen. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Kontextfreie Sprachen

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

Nachklausur zur Vorlesung Informatik 3 mit einigen Anmerkungen zu Lösungen

2.1 Allgemeines. Was ist eine Sprache? Beispiele:

WS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven

Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 48

Programmierkurs Java

Mehrdeutige Grammatiken

Ein Fragment von Pascal

Einführung in die Programmiertechnik

1 Formale Sprachen, reguläre und kontextfreie Grammatiken

Vorlesung Automaten und Formale Sprachen Sommersemester Beispielsprachen. Sprachen

Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Syntax von Programmiersprachen

Das Halteproblem für Turingmaschinen

6 Modellierung von Strukturen 6.1 Kontextfreie Grammatiken

Programmiersprachen und Übersetzer

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Einführung in die Programmierung EBNF. Thomas R. Gross. Department Informatik ETH Zürich

Einführung in die Theoretische Informatik

Algorithmen und Datenstrukturen

Form und Darstellung von Informationen

Einführung in die Programmierung mit Java

Theoretische Informatik I

Zusammenfassung. Beispiel. 1 Wir betrachten die folgende Signatur F = {,, +, 0, 1} sodass. 3 Wir betrachten die Identitäten E. 4 Dann gilt E 1 + x = 1

Formale Sprachen, reguläre und kontextfreie Grammatiken

Theorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie

Software Entwicklung 1

Grundlagen der Theoretischen Informatik

6 Kontextfreie Grammatiken

Inhalt Kapitel 5: Syntax

Theoretische Informatik I

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

1 Syntax von Programmiersprachen

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Fragenkatalog 2. Abgabegespräch Formale Modellierung 3 Reguläre Sprachen

Adventure-Problem. Vorlesung Automaten und Formale Sprachen Sommersemester Adventure-Problem

Transkript:

Einführung in die Informatik: Programmierung und Softwareentwicklung Wintersemester 2018/19 Kapitel 2: Methoden zur Beschreibung von Syntax Prof. Dr. David Sabel Lehr- und Forschungseinheit für Theoretische Informatik Institut für Informatik, LMU München WS 2018/19 Stand der Folien: 26. Oktober 2018 Die Inhalte dieser Folien basieren mit freundlicher Genehmigung tlw. auf Folien von Prof. Dr. Rolf Hennicker aus dem WS 2017/18 und auf Folien von PD Dr. Ulrich Schöpp aus dem WS 2010/11

Übersicht: Inhalt und Ziele Zwei Methoden zur Beschreibung (Definition) der Syntax von Programmiersprachen Backus-Naur-Form BNF und deren Erweiterung EBNF Syntax-Diagramme Peter Naur 1928-2016 Mitwirkung bei ALGOL 60 2005 ACM Turing Award John Backus 1924-2007 Entwicklung von FORTRAN 1977 ACM Turing Award Bildnachweise: (1) The original uploader was Eriktj at English Wikipedia. (https://commons.wikimedia.org/wiki/file:peternaur.jpg), Peternaur, https://creativecommons.org/licenses/by-sa/3.0/legalcode (2) PIerre.Lescanne (https://commons.wikimedia.org/wiki/file:john Backus.jpg), https://creativecommons.org/licenses/by-sa/4.0/legalcode D. Sabel 02 Syntax WS 2018/19 2/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Aufbau von Programmen Java-Programme lassen sich ähnlich wie natürlichsprachliche Texte in verschiedenartige Einzelteile zerlegen Natürliche Sprache Ein Programmierer schreibt ein Programm Java-Programm Subjekt Prädikat Objekt public class Test { public static void main ( String [] args ){ } } System. out. print (" Hal "); System. out. println ("lo!"); Methodenname Stringliteral Anweisungen} Methoden -definition D. Sabel 02 Syntax WS 2018/19 3/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Syntax von Programmiersprachen Der Aufbau von Programmen ist durch die Syntax der Programmiersprache festgelegt. Syntax einer Programmiersprache: System von Regeln, das festlegt, aus welchen Einzelteilen Programme bestehen können, wie man diese Einzelteile textuell aufschreibt und wie man sie zu einem Programm kombinieren kann. Unterschied zu natürlicher Sprache: Die Syntax von Programmiersprachen ist vollständig und präzise festgelegt. D. Sabel 02 Syntax WS 2018/19 4/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Syntax von Programmiersprachen (2) Seit ALGOL 60 wird die Syntax von Programmiersprachen präzise durch formale Grammatiken beschrieben. Der Compiler benutzt die Grammatik der Programmiersprache, um ein gegebenes Programm auf Richtigkeit zu überprüfen. Die Compiler-Phase, in der das geschieht, nennt man Syntaxanalyse oder Parsen. Im Fehlerfall tritt ein Syntax Error (auch Parse Error genannt) auf. D. Sabel 02 Syntax WS 2018/19 5/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

BNF und Syntaxdiagramme: Grundideen Beispiel für eine Grammatikregel: Als Syntaxdiagramm: Satz : Subjekt Prädikat Objekt In BNF-Form: <Satz> ::= <Subjekt> <Prädikat> <Objekt> In EBNF-Form: Satz = Subjekt Prädikat Objekt Das Syntaxdiagramm und die (E)BNF (Backus-Naur-Form) erlauben das Bilden syntaktisch korrekter Sätze: Ein Programmierer schreibt ein Programm Ein Programmierer schreibt ein Programm Subjekt Prädikat Objekt D. Sabel 02 Syntax WS 2018/19 6/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

BNF und Syntaxdiagramme: Grundideen (2) Weiterer Beispielsatz: Ein Programm schreibt einen Programmierer Ein Programm schreibt einen Programmierer Subjekt Prädikat Objekt Dieser Satz ist zwar semantischer Unsinn, aber syntaktisch korrekt. Der Compiler benutzt die Grammatik um ein gegebenes Programm auf syntaktische Richtigkeit zu überprüfen D. Sabel 02 Syntax WS 2018/19 7/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Backus-Naur-Form Die Backus-Naur-Form (BNF) wurde erstmals zur Beschreibung der Syntax von Algol 60 verwendet. Die BNF ist eine Notation für Grammatiken, die vor allem für die Beschreibung von Programmiersprachen verwendet wird. Heute ist die BNF (in notationellen Varianten) die Standardbeschreibungstechnik für Programmiersprachen und andere strukturierte Texte. Wir verwenden in der Vorlesung die Erweiterte Backus-Naur-Form (EBNF) (eingeführt zur Beschreibung von PL1, 60er Jahre). Auch die Syntax von Java ist in einer Variante der Backus-Naur-Form beschrieben. Wichtige Begriffe: Symbole, Regeln, Grammatik, Ableitung D. Sabel 02 Syntax WS 2018/19 8/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Symbole In Grammatiken (BNF / EBNF) kommen drei Arten von Symbolen vor: Nichtterminalsymbole Terminalsymbole Operatorsymbole D. Sabel 02 Syntax WS 2018/19 9/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Symbole: Nichtterminale Nichtterminalsymbole: Symbole, die noch ersetzt werden, und daher durch Regeln definiert werden. In der BNF werden Nichtterminalsymbole gekennzeichnet, indem sie durch <... > umschlossen werden. In der EBNF gibt es keine besondere Kennzeichnung der Nichtterminalsymbole. Beispiele: in BNF: <Digit>, <Sign> in EBNF: Digit, Sign D. Sabel 02 Syntax WS 2018/19 10/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Symbole: Terminale Terminalsymbole: Zeichen oder Folgen von Zeichen, die genau so in der zu definierenden Sprache vorkommen. In der BNF werden Terminalsymbole nicht gekennzeichnet. In der EBNF werden Terminalsymbole gekennzeichnet, indem sie durch doppelte Anführungszeichen umschlossen werden. Beispiele: in BNF: 0, 1, class in EBNF: "0", "1", "class" D. Sabel 02 Syntax WS 2018/19 11/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Operatoren Operatorsymbole: In der BNF gibt es das Operatorsymbol für den Auswahloperator In der EBNF gibt es: Operatorsymbol für den Auswahloperator Operatorsymbol [ ] für den Optionsoperator Operatorsymbol { } für den Wiederholungsoperator D. Sabel 02 Syntax WS 2018/19 12/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Regeln in EBNF Jede EBNF-Regel (oder auch Produktion/Produktionsregel) hat die Form Nichtterminalsymbol = Ausdruck Ein Ausdruck ist entweder ein Terminalsymbol oder ein Nichtterminalsymbol oder ein zusammengesetzter Ausdruck. D. Sabel 02 Syntax WS 2018/19 13/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Regeln in EBNF Jede EBNF-Regel (oder auch Produktion/Produktionsregel) hat die Form Ein Ausdruck ist entweder ein Terminalsymbol oder ein Nichtterminalsymbol oder Nichtterminalsymbol = Ausdruck ein zusammengesetzter Ausdruck. Aus gegebenen Ausdrücken E, E 1 und E 2 können mit den Operatorsymbolen zusammengesetzte Ausdrücke gebildet werden: Sequentielle Komposition E 1 E 2 ( E 1 gefolgt von E 2 ) D. Sabel 02 Syntax WS 2018/19 13/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Regeln in EBNF Jede EBNF-Regel (oder auch Produktion/Produktionsregel) hat die Form Ein Ausdruck ist entweder ein Terminalsymbol oder ein Nichtterminalsymbol oder Nichtterminalsymbol = Ausdruck ein zusammengesetzter Ausdruck. Aus gegebenen Ausdrücken E, E 1 und E 2 können mit den Operatorsymbolen zusammengesetzte Ausdrücke gebildet werden: Sequentielle Komposition E 1 E 2 ( E 1 gefolgt von E 2 ) Auswahl E 1 E 2 ( E 1 oder E 2 ) D. Sabel 02 Syntax WS 2018/19 13/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Regeln in EBNF Jede EBNF-Regel (oder auch Produktion/Produktionsregel) hat die Form Ein Ausdruck ist entweder ein Terminalsymbol oder ein Nichtterminalsymbol oder Nichtterminalsymbol = Ausdruck ein zusammengesetzter Ausdruck. Aus gegebenen Ausdrücken E, E 1 und E 2 können mit den Operatorsymbolen zusammengesetzte Ausdrücke gebildet werden: Sequentielle Komposition E 1 E 2 ( E 1 gefolgt von E 2 ) Auswahl E 1 E 2 ( E 1 oder E 2 ) Option [E] ( E darf weggelassen werden ) D. Sabel 02 Syntax WS 2018/19 13/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Regeln in EBNF Jede EBNF-Regel (oder auch Produktion/Produktionsregel) hat die Form Ein Ausdruck ist entweder ein Terminalsymbol oder ein Nichtterminalsymbol oder Nichtterminalsymbol = Ausdruck ein zusammengesetzter Ausdruck. Aus gegebenen Ausdrücken E, E 1 und E 2 können mit den Operatorsymbolen zusammengesetzte Ausdrücke gebildet werden: Sequentielle Komposition E 1 E 2 ( E 1 gefolgt von E 2 ) Auswahl E 1 E 2 ( E 1 oder E 2 ) Option [E] ( E darf weggelassen werden ) Wiederholung {E} ( E kann 0-mal oder mehrmals hintereinander vorkommen ) D. Sabel 02 Syntax WS 2018/19 13/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Grammatik und Worte Eine Grammatik besteht aus einer Menge von Regeln für jedes Nichtterminal sowie einem Startsymbol (Nichtterminalsymbol) Ein Wort ist eine Folge von Terminalzeichen. Eine Grammatik G definiert eine Menge von Worten, genannt: Die Sprache von G (Definition folgt noch) D. Sabel 02 Syntax WS 2018/19 14/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (1) Grammatik für Ziffern (mit Startsymbol Digit ) NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Digit = "0" NonZeroDigit D. Sabel 02 Syntax WS 2018/19 15/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (1) Grammatik für Ziffern (mit Startsymbol Digit ) NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" } {{ } EBNF-Regel Digit = "0" NonZeroDigit D. Sabel 02 Syntax WS 2018/19 15/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (1) Grammatik für Ziffern (mit Startsymbol Digit ) Nichtterminalsymbol NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" } {{ } EBNF-Regel Digit = "0" NonZeroDigit D. Sabel 02 Syntax WS 2018/19 15/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (1) Grammatik für Ziffern (mit Startsymbol Digit ) Nichtterminalsymbol Terminalsymbole NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" } {{ } EBNF-Regel Digit = "0" NonZeroDigit D. Sabel 02 Syntax WS 2018/19 15/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (1) Grammatik für Ziffern (mit Startsymbol Digit ) Nichtterminalsymbol Terminalsymbole NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" } {{ oder -Auswahl } EBNF-Regel Digit = "0" NonZeroDigit D. Sabel 02 Syntax WS 2018/19 15/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (2) Grammatik für ganze Zahlen, wobei IntegerValue das Startsymbol ist: IntegerValue = [ Sign ] DecimalNumeral Sign = "+" "-" DecimalNumeral = "0" NonZeroDigit [ Digits ] Digits = Digit { Digit } Informell: Eine ganze Zahl besteht aus einer nichtleeren Folge von Ziffern ohne führende Null, eventuell mit vorangestelltem Vorzeichen. D. Sabel 02 Syntax WS 2018/19 16/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für EBNF-Grammatiken (2) Grammatik für ganze Zahlen, wobei IntegerValue das Startsymbol ist: IntegerValue = [ Sign ] DecimalNumeral Sign = "+" "-" DecimalNumeral = "0" NonZeroDigit [ Digits ] Digits = Digit { Digit } Informell: Eine ganze Zahl besteht aus einer nichtleeren Folge von Ziffern ohne führende Null, eventuell mit vorangestelltem Vorzeichen. Andere mögliche Varianten für die Regel für Digits ohne den Wiederholungsoperator zu verwenden: (alle verwenden Rekursion): Digits = Digit [ Digits ] oder Digits = [ Digits ] Digit Ohne Optionsoperator: Digits = Digit Digit Digits oder Digits = Digit Digits Digit D. Sabel 02 Syntax WS 2018/19 16/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: IntegerValue D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: IntegerValue Regel für IntegerValue [ Sign ] DecimalNumeral D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral Regel für Sign ( "+" "-" ) DecimalNumeral D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral Regel für Sign Ausführen des Operators ( "+" "-" ) DecimalNumeral "+" DecimalNumeral D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral Regel für Sign Ausführen des Operators ( "+" "-" ) DecimalNumeral "+" DecimalNumeral Regel für DecimalNumeral "+" ( "0" NonZeroDigit [ Digits ]) D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral Regel für Sign Ausführen des Operators ( "+" "-" ) DecimalNumeral "+" DecimalNumeral Regel für DecimalNumeral "+" ( "0" NonZeroDigit [ Digits ]) Ausführen des Operators "+" NonZeroDigit [ Digits ] D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral Regel für Sign Ausführen des Operators ( "+" "-" ) DecimalNumeral "+" DecimalNumeral Regel für DecimalNumeral "+" ( "0" NonZeroDigit [ Digits ]) Ausführen des Operators "+" NonZeroDigit [ Digits ] Regel für NonZeroDigit "+" ( "1" "2" "3" "4" "5" "6" "7" "8" "9" )[ Digits ] D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? Ist +42 eine ganze Zahl? Wir bilden folgende Ableitung: Regel für IntegerValue IntegerValue [ Sign ] DecimalNumeral Ausführen des Operators [ ] Sign DecimalNumeral Regel für Sign Ausführen des Operators ( "+" "-" ) DecimalNumeral "+" DecimalNumeral Regel für DecimalNumeral "+" ( "0" NonZeroDigit [ Digits ]) Ausführen des Operators "+" NonZeroDigit [ Digits ] Regel für NonZeroDigit "+" ( "1" "2" "3" "4" "5" "6" "7" "8" "9" )[ Digits ] Ausführen des Operators "+" "4" [ Digits ] D. Sabel 02 Syntax WS 2018/19 17/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) "+" "4" [ Digits ] D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) "+" "4" [ Digits ] Ausführen des Operators [ ] "+" "4" Digits D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) Ausführen des Operators [ ] "+" "4" [ Digits ] "+" "4" Digits Regel für Digits "+" "4" Digit { Digit } D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) Ausführen des Operators [ ] "+" "4" [ Digits ] "+" "4" Digits Regel für Digits "+" "4" Digit { Digit } Regel für Digit "+" "4" ( "0" NonZeroDigit ){ Digit } D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) Ausführen des Operators [ ] "+" "4" [ Digits ] "+" "4" Digits Regel für Digits "+" "4" Digit { Digit } Regel für Digit "+" "4" ( "0" NonZeroDigit ){ Digit } Ausführen des Operators "+" "4" NonZeroDigit { Digit } D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) Ausführen des Operators [ ] "+" "4" [ Digits ] "+" "4" Digits Regel für Digits "+" "4" Digit { Digit } Regel für Digit "+" "4" ( "0" NonZeroDigit ){ Digit } Ausführen des Operators "+" "4" NonZeroDigit { Digit } Regel für NonZeroDigit "+" "4" ( "1" "2" "3" "4" "5" "6" "7" "8" "9" ){ Digit }) D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) Ausführen des Operators [ ] "+" "4" [ Digits ] "+" "4" Digits Regel für Digits "+" "4" Digit { Digit } Regel für Digit "+" "4" ( "0" NonZeroDigit ){ Digit } Ausführen des Operators "+" "4" NonZeroDigit { Digit } Regel für NonZeroDigit "+" "4" ( "1" "2" "3" "4" "5" "6" "7" "8" "9" ){ Digit }) Ausführen des Operators "+" "4" "2" { Digit } D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Wie wendet man Regeln an? (2) Ausführen des Operators [ ] "+" "4" [ Digits ] "+" "4" Digits Regel für Digits "+" "4" Digit { Digit } Regel für Digit "+" "4" ( "0" NonZeroDigit ){ Digit } Ausführen des Operators "+" "4" NonZeroDigit { Digit } Regel für NonZeroDigit "+" "4" ( "1" "2" "3" "4" "5" "6" "7" "8" "9" ){ Digit }) Ausführen des Operators "+" "4" "2" { Digit } Ausführen des Operators { } "+" "4" "2" D. Sabel 02 Syntax WS 2018/19 18/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Ableitung von Worten Ein Wort w kann vom Startsymbol der Grammatik G abgeleitet werden, falls es eine Ableitung der Form E 0 E 1... E k gibt, wobei E 0 ist das Startsymbol der Grammatik G E k ist identisch zum Wort w E i E i+1 entsteht entweder durch 1. Ersetzung eines oder mehrerer Nichtterminale in E i durch die rechte Seite ihrer Regeln, oder 2. durch Ausführung von (einem oder mehreren) Operator(en), d.h. [E] darf gelöscht werden oder durch E ersetzt werden E F darf durch E oder durch F ersetzt werden {E} darf gelöscht werden oder durch E{E} ersetzt werden. D. Sabel 02 Syntax WS 2018/19 19/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Kurze Ableitung Häufig wird Schritt 1) und Schritt 2) in einem Schritt zusammengefasst. Man spricht dann von einer kurzen Ableitung. E i E i+1 entsteht entweder durch 1. Ersetzung eines oder mehrerer Nichtterminale in E i durch die rechte Seite ihrer Regeln, oder 2. durch Ausführung von (einem oder mehreren) Operator(en) D. Sabel 02 Syntax WS 2018/19 20/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Kurze Ableitung Häufig wird Schritt 1) und Schritt 2) in einem Schritt zusammengefasst. Man spricht dann von einer kurzen Ableitung. E i E i+1 entsteht entweder durch 1. Ersetzung eines oder mehrerer Nichtterminale in E i durch die rechte Seite ihrer Regeln, oder und / oder 2. durch Ausführung von (einem oder mehreren) Operator(en) D. Sabel 02 Syntax WS 2018/19 20/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Kurze Ableitung Häufig wird Schritt 1) und Schritt 2) in einem Schritt zusammengefasst. Man spricht dann von einer kurzen Ableitung. E i E i+1 entsteht durch 1. Ersetzung eines oder mehrerer Nichtterminale in E i durch die rechte Seite ihrer Regeln, und / oder 2. durch Ausführung von (einem oder mehreren) Operator(en) sodass mindestens ein Nichtterminal ersetzt oder ein Operator ausgeführt wurde. D. Sabel 02 Syntax WS 2018/19 20/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Kurze Ableitung Häufig wird Schritt 1) und Schritt 2) in einem Schritt zusammengefasst. Man spricht dann von einer kurzen Ableitung. E i E i+1 entsteht durch 1. Ersetzung eines oder mehrerer Nichtterminale in E i durch die rechte Seite ihrer Regeln, und / oder 2. durch Ausführung von (einem oder mehreren) Operator(en) sodass mindestens ein Nichtterminal ersetzt oder ein Operator ausgeführt wurde. Darf -Konvention: Bei einer kurzen Ableitung dürfen Schritt 1) und 2) zusammengefasst werden (müssen aber nicht). Folgerung: Jede lange Ableitung ist auch eine kurze (Die Umkehrung gilt nicht!) D. Sabel 02 Syntax WS 2018/19 20/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (1) Betrachte die folgende Grammatik mit Startsymbol PEx : PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine (lange) Ableitung von 1+2+3: PEx D. Sabel 02 Syntax WS 2018/19 21/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (1) Betrachte die folgende Grammatik mit Startsymbol PEx : PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine (lange) Ableitung von 1+2+3: PEx Ersetzung von PEx NonZeroDigit PEx "+" PEx D. Sabel 02 Syntax WS 2018/19 21/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (1) Betrachte die folgende Grammatik mit Startsymbol PEx : PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine (lange) Ableitung von 1+2+3: Ersetzung von PEx PEx NonZeroDigit PEx "+" PEx Ersetzung von PEx NonZeroDigit PEx "+" ( NonZeroDigit PEx "+" PEx ) D. Sabel 02 Syntax WS 2018/19 21/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (1) Betrachte die folgende Grammatik mit Startsymbol PEx : PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine (lange) Ableitung von 1+2+3: Ersetzung von PEx PEx NonZeroDigit PEx "+" PEx Ersetzung von PEx NonZeroDigit PEx "+" ( NonZeroDigit PEx "+" PEx ) Ausführung von (an 2 Stellen) PEx "+" ( PEx "+" PEx ) D. Sabel 02 Syntax WS 2018/19 21/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (1) Betrachte die folgende Grammatik mit Startsymbol PEx : PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine (lange) Ableitung von 1+2+3: Ersetzung von PEx PEx NonZeroDigit PEx "+" PEx Ersetzung von PEx NonZeroDigit PEx "+" ( NonZeroDigit PEx "+" PEx ) Ausführung von (an 2 Stellen) PEx "+" ( PEx "+" PEx ) Ersetzung von PEx (an 2 Vorkommen) ( NonZeroDigit PEx "+" PEx ) "+" ( PEx "+" ( NonZeroDigit PEx "+" PEx )) D. Sabel 02 Syntax WS 2018/19 21/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (1) Betrachte die folgende Grammatik mit Startsymbol PEx : PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine (lange) Ableitung von 1+2+3: Ersetzung von PEx PEx NonZeroDigit PEx "+" PEx Ersetzung von PEx NonZeroDigit PEx "+" ( NonZeroDigit PEx "+" PEx ) Ausführung von (an 2 Stellen) PEx "+" ( PEx "+" PEx ) Ersetzung von PEx (an 2 Vorkommen) ( NonZeroDigit PEx "+" PEx ) "+" ( PEx "+" ( NonZeroDigit PEx "+" PEx )) Ausführung von (an 2 Stellen) NonZeroDigit "+" ( PEx "+" NonZeroDigit ) D. Sabel 02 Syntax WS 2018/19 21/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (2) PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Fortsetzung der (langen) Ableitung von 1+2+3: NonZeroDigit "+" ( PEx "+" NonZeroDigit ) Ersetzung von NonZeroDigit (2 ) und PEx ( "1"... "9" ) "+" (( NonZeroDigit PEx "+" PEx ) "+" ( "1"... "9" )) Ausführung von (mehrere Stellen) "1" "+" NonZeroDigit "+" "3" Ersetzung von NonZeroDigit "1" "+" ( "1"... "9" ) "+" "3" Ausführung von "1" "+" "2" "+" "3" D. Sabel 02 Syntax WS 2018/19 22/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele (3) PEx = NonZeroDigit PEx "+" PEx NonZeroDigit = "1" "2" "3" "4" "5" "6" "7" "8" "9" Eine kurze Ableitung von 1+2+3: Ersetzung von PEx und Ausführung von Ersetzung von PEx (2 ) und Ausführung von (2 ) PEx PEx "+" PEx NonZeroDigit "+" PEx "+" PEx Ersetzung von NonZeroDigit und PEx (2 ) Ausführung von (mehrfach) "1" "+" NonZeroDigit "+" NonZeroDigit Ersetzung von NonZeroDigit (2 ) und Ausführung von (mehrfach) "1" "+" "2" "+" "3" D. Sabel 02 Syntax WS 2018/19 23/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Die Sprache einer Grammatik Jede Grammatik G definiert eine Menge von Wörtern, die als Sprache von G bezeichnet wird. Wir schreiben L(G) für die Sprache von G. (L steht für Language.) Die Sprache L(G) besteht genau aus den Wörtern, die vom Startsymbol der Grammatik abgeleitet werden können: L(G) = {w S... w, S Startsymbol von G, w ein Wort} D. Sabel 02 Syntax WS 2018/19 24/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele Sei G die folgende Grammatik mit Startsymbol Start : Start = "a" Mitte "c" Mitte = { "b" } L(G) = D. Sabel 02 Syntax WS 2018/19 25/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele Sei G die folgende Grammatik mit Startsymbol Start : Start = "a" Mitte "c" Mitte = { "b" } L(G) = Menge aller Worte, die mit a anfangen, dann beliebig viele b s folgen und schließlich mit c enden D. Sabel 02 Syntax WS 2018/19 25/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele Sei G die folgende Grammatik mit Startsymbol Brackets : Brackets = Brackets Brackets "(" ")" "[" "]" "(" Brackets ")" "[" Brackets "]" L(G) = D. Sabel 02 Syntax WS 2018/19 26/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele Sei G die folgende Grammatik mit Startsymbol Brackets : Brackets = Brackets Brackets "(" ")" "[" "]" "(" Brackets ")" "[" Brackets "]" L(G) = Menge aller korrekt geklammerten Klammerausdrücke aus runden und eckigen Klammern D. Sabel 02 Syntax WS 2018/19 26/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

EBNF-Grammatik für Bezeichner Ein Bezeichner (Identifier) ist eine nichtleere Folge von Buchstaben oder Ziffern, beginnend mit einem Buchstaben. Bezeichner sind z.b. A, A200D3, Muenchen Keine Bezeichner sind 007, O.K., 1A EBNF-Grammatik (mit Startsymbol Identifier ) Letter = "A"... "Z" "a"... "z" Identifier = Letter { Letter Digit } Digit =... (wie vorher) In Java müssen alle Variablennamen, Klassennamen usw. Bezeichner sein. Die Grammatik in Java ist jedoch etwas allgemeiner als oben D. Sabel 02 Syntax WS 2018/19 27/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

EBNF-Variante für Java Die Java-Sprachdefinition verwendet eine andere Variante der EBNF. https://docs.oracle.com/javase/specs/jls/se8/html/jls-2.html#jls-2.4 Notation dort: Nichtterminalsymbole sind kursiv Terminalsymbole sind in Schreibmaschinenschrift (z.b. if statt "if" ) Regeln werden als N : E (anstelle von N = E) geschrieben Das Auswahlsymbol, d.h. wird weggelassen und durch einen Zeilenumbruch ersetzt, oder man verwendet (one of) In älteren Spezifikationen: Die Option wird durch tiefgestelltes opt gekennzeichnet: E opt statt [E]. D. Sabel 02 Syntax WS 2018/19 28/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele aus der Java-Spezifikation DecimalNumeral : 0 NonZeroDigit [Digits] Digits : Digit Digits Digit Digit : 0 NonZeroDigit NonZeroDigit : (one of) 1 2 3 4 5 6 7 8 9 D. Sabel 02 Syntax WS 2018/19 29/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Syntaxdiagramme Ein Syntaxdiagramm ist ein einfacher grafischer Formalismus zur Definition von Sprachen. Er besteht aus Rechtecken, in denen Nichtterminale stehen Ovalen (oder Rechtecke mit abgerundeten Ecken) in den Terminale stehen Pfeilen, die die Elemente verbinden, Genau einem Eingangs- und einem Ausgangspfeil Je ein Nichtterminalsymbol wird durch je ein Syntaxdiagramm definiert Nichtterminal : D. Sabel 02 Syntax WS 2018/19 30/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für Syntaxdiagramme EBNF: Satz = Subjekt Prädikat Objekt Syntax-Diagramm: Satz : Subjekt Prädikat Objekt (Syntaxdiagramme für Subjekt, Prädikat, Objekt müssen noch hinzugefügt werden) D. Sabel 02 Syntax WS 2018/19 31/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiele für Syntaxdiagramme (2) EBNF: Syntaxdiagramm: Digit : 0 Digit = "0" "1" "2"... "9" Digits = Digit [ Digits ] 1 2... 8 9 Digits : Digit Digits D. Sabel 02 Syntax WS 2018/19 32/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Vom Syntaxdiagramm definierte Sprache Ein Wort w liegt genau dann, in der durch ein Syntaxdiagramm definierten Sprache, wenn man das Syntaxdiagramm vom Eingangs- zum Ausgangspfeil entlang w durchlaufen kann: Alle durchlaufenen Knoten T für Terminalsymbole geben aneinander gereiht (in der Durchlaufreihenfolge) das Wort w. Durchlauf durch einen Knoten N für Nichtterminalsymbol N bedeutet Durchlauf des Syntaxdiagramms für N. Der durchlaufene Weg hat endliche Länge. D. Sabel 02 Syntax WS 2018/19 33/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiel Wird 1019 durch das Synaxdiagramm für Digits erkannt? Digit : 0 1 2... 8 9 Digits : Digit Digits D. Sabel 02 Syntax WS 2018/19 34/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? c abbbbb a aabbcc abccb bcbc bcabc D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? abbbbb a aabbcc c abccb bcbc bcabc Allgemein: Alle Worte, die mit genauem einem a anfangen und anschließend beliebige b und c folgen dürfen. D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Noch ein Beispiel a b Welche Worte werden durch das Syntaxdiagramm erkannt? abbbbb a aabbcc c abccb bcbc bcabc Allgemein: Alle Worte, die mit genauem einem a anfangen und anschließend beliebige b und c folgen dürfen. EBNF dazu: N = "a" { "b" "c" } D. Sabel 02 Syntax WS 2018/19 35/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Korrespondenz von EBNF und Syntaxdiagrammen (1) Auswahl E 1 E 2 wird durch eine Verzweigung repräsentiert: E 1 Sequentielle Komposition E 1 E 2 wird durch Aneinanderhängen repräsentiert: E 2 E 1 E 2 Option [E] wird repräsentiert durch: Wiederholung {E} wird repräsentiert durch: E E D. Sabel 02 Syntax WS 2018/19 36/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Korrespondenz von EBNF und Syntaxdiagrammen (2) Umgekehrt geht es auch: Folgerung Jedes Syntaxdiagramm lässt sich als EBNF darstellen. Syntaxdiagramme und EBNF sind äquivalent in dem Sinne, dass sie die gleiche Klasse von formalen Sprachen beschreiben. Man nennt diese Klasse: Die Kontextfreien Sprachen Der Begriff kontextfrei rührt daher, dass Nichtterminale ersetzt werden, ohne benachbarte Symbole zu betrachten (den Kontext) D. Sabel 02 Syntax WS 2018/19 37/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Formale Sprachen: Bemerkungen Die Informatik verwendet zur Klassifizierung von formalen Grammatiken häufig die sogenannte Chomsky-Hierarchie (benannt nach Noam Chomsky) Typ-0: rekursiv aufzählbar Typ-1: kontextsensitiv Typ-2: kontextfrei Typ-3: regulär Beispiel für eine formale Sprache die nicht kontextfrei ist: Die Sprache bestehend aus allen Wörtern der Form a n b n c n mit n 1, d.h. die Wörter abc, aabbcc, aaabbbccc, aaaabbbbcccc,... D. Sabel 02 Syntax WS 2018/19 38/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Reguläre Sprachen Reguläre Grammatiken haben nur Regeln der Form E = F 1... F n wobei jedes der F i von einer der folgenden Formen ist: w mit w ist ein Wort (d.h. Folge von Terminalsymbolen), we mit w ein Wort und E ein Nichtterminalsymbol, oder ε (das leere Wort) Die durch reguläre Grammatiken erzeugten Sprachen heißen reguläre Sprachen D. Sabel 02 Syntax WS 2018/19 39/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Reguläre Grammatiken: Beispiele Grammatik G 1 mit Startsymbol A : A = "a" "a" "a" "a" A Die Grammatik G 1 ist regulär und L(G 1 ) ist die Menge aller Worte mit gerader Anzahl an a s (mindestens 2). Grammatik mit G 2 mit Startsymbol B : B = "a" "a" "a" B "a" Die Grammatik ist nicht regulär, aber L(G 2 ) = L(G 1 ). Beachte: Die Sprache bestehend aus allen Worten mit einer geraden Anzahl an a s ist eine reguläre Sprache, da sie durch eine reguläre Grammatik erzeugt wird. D. Sabel 02 Syntax WS 2018/19 40/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Reguläre Sprachen (3) Reguläre Sprachen sind eine echte Teilmenge der kontextfreien Sprachen (d.h. der durch EBNFs erzeugten Sprachen). Beispiel: Die Sprache aller Worte der Form a n b n mit n 1 ist nicht regulär, aber die EBNF AnBn = "a" "b" "a" AnBn "b" erzeugt diese (d.h. die Sprache ist kontextfrei). D. Sabel 02 Syntax WS 2018/19 41/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Beispiel: Palindrome Ein Palindrom ist ein Wort das von links oder von rechts gelesen dasselbe Wort ergibt (griechisch paĺındromos: rückwärts laufend ) Palindrome sind z.b. Keine Palindrome: legeaneinebrandnarbenienaegel ANNA ANANA A 37873 37687 ANANAS ANNAN ANAA D. Sabel 02 Syntax WS 2018/19 42/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Syntaxdiagramm für Palindrome Syntaxdiagramm für Palindrome, die mit den Buchstaben A und N gebildet werden können: Palindrom : A N A Palindrom A N Palindrom N D. Sabel 02 Syntax WS 2018/19 43/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

EBNF für Palindrome EBNF-Grammatik für Palindrome, die mit den Buchstaben A und N gebildet werden können: Palindrom = "A" "N" "A" [ Palindrom ] "A" "N" [ Palindrom ] "N" D. Sabel 02 Syntax WS 2018/19 44/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Zusammenfassung Formalismen zur Beschreibung der Syntax von Programmiersprachen Backus-Naur-Form (BNF) Erweiterte Backus-Naur-Form (EBNF) Jede (E)BNF-Grammatik besteht aus einem Startsymbol und einer Menge von Regeln (eine Regel pro Nichtterminalsymbol) Jede (E)BNF-Grammatik G erzeugt eine Sprache L(G) (Menge von Wörtern) D. Sabel 02 Syntax WS 2018/19 45/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome

Zusammenfassung (2) Syntaxdiagramme sind ein zu (E)BNF-äquivalenter grafischer Formalismus, wobei Nichtterminalsymbole in Rechttecken Terminalsymbole in Ovalen Pfeile führen von einem Sprachelement zum anderen jedes Syntaxdiagramm besitzt genau einen Eingangs- und Ausgangspfeil. All diese Formalismen repräsentieren die sogenannten kontextfreien Sprachen (vgl. Chomsky-Hierarchie) D. Sabel 02 Syntax WS 2018/19 46/46 Ideen (E)BNF Syntaxdiagramme Reguläre S. Palindrome