Syntax von Programmiersprachen

Ähnliche Dokumente
Kapitel 2. Methoden zur Beschreibung von Syntax

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

Alphabet, formale Sprache

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Kapitel IV Formale Sprachen und Grammatiken

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

Kapitel 5: Syntaxdiagramme und Grammatikregeln

7. Formale Sprachen und Grammatiken

7. Syntax: Grammatiken, EBNF

Formale Sprachen, reguläre und kontextfreie Grammatiken

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

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

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

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

Programmiersprachen und Übersetzer

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

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

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Formale Sprachen und Grammatiken

Grundbegriffe. Grammatiken

1 Formale Sprachen, reguläre und 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

2.1 Allgemeines. Was ist eine Sprache? Beispiele:

4. Induktives Definieren - Themenübersicht

Programmieren I. Formale Sprachen. Institut für Angewandte Informatik

Sprachen und Programmiersprachen

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

Programmierkurs Java

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 45

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

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

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

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

1. Formale Sprachen 1.2 Grammatiken formaler Sprachen

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

Kontextfreie Grammatiken

Einführung in die Informatik I (autip)

1 Syntax von Programmiersprachen

Programmierkurs I. Gliederung: Deklarationsteil als BNF 2. Blöcke in Ada95 (Lebenszeit, Sichtbarkeit von Variablen)

3.4 Struktur von Programmen

Informatik I Tutorium WS 07/08

Syntaxanalyse Ausgangspunkt und Ziel

Formale Methoden 1. Gerhard Jäger 28. November Uni Bielefeld, WS 2007/2008 1/15

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

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

Von der Chomsky-Hierarchie

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

6 Kontextfreie Grammatiken

Informatik IV Theoretische Informatik: Formale Sprachen und Automaten, Berechenbarkeit und NP-Vollständigkeit

Einführung in die Informatik Grammars & Parsers

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundlagen der Programmierung - Datenstrukturen

Syntax (= Satzgefüge), vgl. auch Grammatik

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

Formale Sprachen. Inhalte. Lehrplan. Hinweis

Sprachbeschreibung und Erweiterung

Informatik I WS 07/08 Tutorium 24

FORMALE SYSTEME. 3. Vorlesung: Endliche Automaten. TU Dresden, 17. Oktober Markus Krötzsch

Übung Praktische Informatik I

Algorithmen & Programmierung. Formale Sprachen Die Logik hinter dem Compiler

Formale Sprachen. Eine Einführung. Tim Lethen Düsseldorf Version II (04-06)

FORMALE SYSTEME. Sprachen beschreiben. Wiederholung. Wie kann man Sprachen beschreiben? 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie

Übungsblatt 1 - Lösung

Informatik 12 Kapitel 1 - Formale Sprachen

TU Kaiserslautern. Übungsblatt 2: Software-Entwicklung 1 (WS 2017/18) Hinweise zu Einreichaufgaben. Hinweise zu den Übungen

Algorithmen und Formale Sprachen

Theorie der Informatik

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

2.11 Kontextfreie Grammatiken und Parsebäume

Einführung in die Computerlinguistik Formale Grammatiken rechtslineare und kontextfreie Grammatiken Kellerautomaten

Compiler, Übersetzer. Allgemeine Erklärung / Definition

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Notation um Grammatik G hervorzuheben: Eine kontextfreie Grammatik erzeugt eine kontextfreie Sprache. Informatik I -1- WS 2005/2006

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Theoretische Grundlagen des Software Engineering

Programmierkurs II. Prof. Dr. Wolfgang Effelsberg. Universität Mannheim. Sommersemester Wolfgang Effelsberg Programmiersprachen

Theoretische Informatik Testvorbereitung Moritz Resl

Technische Informatik für Ingenieure WS 2010/2011 Musterlösung Übungsblatt Nr. 4

Formalismen für REG. Formale Grundlagen der Informatik 1 Kapitel 7 Kontextfreie Sprachen. Das Pumping Lemma. Abschlusseigenschaften

6 Modellierung von Strukturen 6.1 Kontextfreie Grammatiken. Kontextfreie Grammatik. Vorlesung Modellierung WS 2011/12 / Folie 601

Teil IX. Eine kleine Programmiersprache

Vorlesung Theoretische Informatik

Transkript:

"Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08 http://www.dbs.ifi.lmu.de/lehre/nfinfosw/

2 Ziele Zwei Standards zur Definition der Syntax von Programmiersprachen kennen lernen: Backus-Naur-Form (BNF) Syntaxdiagramme

Syntax von Programmiersprachen und Syntaxdiagramme Beispiel für eine Grammatik 3 Als Syntaxdiagramm: Satz : Subjekt Prädikat Objekt In BNF-Form: Satz = Subjekt Prädikat Objekt Das Syntaxdiagramm und die EBNF (erweiterte Backus-Naur-Form) erlauben das Bilden folgender korrekter Sätze: Ein Programmierer schreibt ein Programm. - Ein Programmierer Subjekt - schreibt Prädikat - ein Programm Objekt Ein Student liest einen Text. Dieser Satz ist syntaktisch korrekt.

4 Syntax von Programmiersprachen und Syntaxdiagramme Die BNF (Backus-Naur-Form), benannt nach John Backus und Peter Naur, wurde erstmals zur Beschreibung der Syntax von Algol 60 verwendet. Heute ist die BNF (in notationellen Varianten) die Standardbeschreibungstechnik für Programmiersprachen. Wir verwenden in der Vorlesung die erweiterte Backus- Naur-Form EBNF. Auch die Syntax von Java wird in der Backus-Naur-Form beschrieben.

Backus-Naur-Form 5 Beispiel: EBNF für Ziffern Nichtterminalsymbol Terminalsymbol BNF-Regel Ziffer = 0 1 2 3 4 5 6 7 8 9 oder Auswahl Vorzeichen = + -

Backus-Naur-Form 6 Zahl ist eine nicht-leere Folge von Ziffern Zahlen werden also durch Aneinanderhängen von Zahlen und Ziffern gebildet. Spezielle Beispiele für Zahlen sind: 1 Zahl 1 5 Zahl = Ziffer Zahl Ziffer Rekursion Zahl Ziffer 1 5 7 Zahl Ziffer GanzeZahl (engl. Integer) ist eine Zahl mit möglichen Vorzeichen. GanzeZahl = [Vorzeichen] Zahl BNF-Regel Zahl

Backus-Naur-Form 7 Wir unterscheiden 2 Arten von Symbolen: Nichtterminalsymbole stehen für Begriffe, die durch BNF-Regeln erklärt werden (z.b Ziffer, Zahl, ) Terminalsymbole (geschrieben in Anführungszeichen) stehen für Symbole und Namen, die so in den Programmtext übernommen werden (z.b. 0, 1, +, ) Jede BNF-Regel hat die Form: A = Ausdruck wobei A ein Nichtterminalsymbol ist und ein Ausdruck gebildet wird aus: Terminal- und Nichtterminalsymbolen Operatoren zum Bilden von Ausdrücken Auswahl E1 E2 für E1 oder E2 Sequentielle Komposition E1 E2 (direkt hintereinander schreiben) für E2 folgt direkt auf E1 Option: [E1] für E1 kann 1-mal oder 0-mal (d.h. nicht) vorkommen

8 Wie erhält man aus der Grammatik korrekte Wörter? Ist +31 eine GanzeZahl? Wir bilden folgende Ableitung: GanzeZahl (rechte Seite der Def. von GanzeZahl) [Vorzeichen] Zahl (Ausführen des Operators []) Vorzeichen Zahl ( + - ) Zahl (Ausführen der Auswahl) + Zahl (Def. von Zahl) + (Ziffer Zahl Ziffer) (Ausführen von ) + (Zahl Ziffer) (Def. von Zahl) + ((Ziffer Zahl Ziffer) Ziffer) (Auswahl) + Ziffer Ziffer (Def. von Ziffer) + ( 0 1... 9 ) Ziffer (mehrfache Auswahl) + 3 Ziffer (Def. von Ziffer) + 3 ( 0 1... 9 ) (mehrfache Auswahl) + 3 1 (Ersetzen von Vorzeichen durch rechte Seite der Def.)

BNF-Grammatik 9 Eine BNF-Grammatik besteht aus einer Menge von BNF-Regeln zusammen mit einem Startsymbol (Nichtterminalzeichen für den betrachteten Begriff z.b. GanzeZahl). Jede solche Grammatik G definiert eine Menge von Wörtern, die als Sprache von G, geschrieben L(G), bezeichnet wird. (L für Language) Ein Wort ist eine Folge von Terminalzeichen.

BNF-Grammatik 10 Man erhält jedes Wort w von L(G) durch eine Ableitung der Form S E 1 E 2... E k wobei S das Startsymbol von G ist, E i+1 aus E i dadurch entsteht, dass ein oder mehrere Nichtterminale aus E i durch die rechten Seiten ihrer Definition ersetzt werden oder dass Operatoren ausgewertet werden. E k w syntaktisch gleich Hier bedeutet " die syntaktische Gleichheit. Bei dem abgeleiteten Wort w verzichtet man im Allgemeinen auf die Anführungszeichen.

Bemerkung: BNF-Grammatik für Java 11 Die Java-Spezifikation verwendet eine etwas andere Schreibweise: Nichtterminalsymbole kursiv (z.b. Ziffer statt Ziffer) Terminalsymbole Schreibmaschinenschrift (z.b. if statt "if") Statt A = E schreibt man A: E Die Auswahl wird weggelassen und durch neue Zeile ersetzt. z.b. Vorzeichen: + - Die Option wird durch tiefgestelltes opt gekennzeichnet. z.b. E opt statt [E] Beispiel: Zahl : Ziffer Vorzeichen : + GanzeZahl: Vorzeichen opt Zahl Zahl Ziffer -

Abgeleitete Operationen 12 Eine Folge von Ausdrücken gleicher Bauart läßt sich so beschreiben: Sei E ein Ausdruck {E} bedeutet: E kann 0-mal oder mehrmals auftreten. Man kann {E} folgendermaßen definieren: {E} = [E] E kann beliebig (aber endlich) oft auftreten. E {E} Äquivalent dazu ist die Definition: {E} = [E] {E} E

Beispiel: Bezeichner 13 Ein Bezeichner besteht aus einer nichtleeren Folge von Buchstaben oder Ziffern, beginnend mit einem Buchstaben. Bezeichner sind z.b. A, A2D2, Wirsing Keine Bezeichner sind 007, 1B, F.D.P (Punkte sind keine Buchstaben.) EBNF-Grammatik: Buchstabe = "A" "B"... "Z" "a"... "z" Buzi = Buchstabe Ziffer Bezeichner = Buchstabe {Buzi}

Syntaxdiagramme 14 Ein Syntaxdiagramm ist ein einfacher grafischer Formalismus zur Beschreibung der Syntax von Programmen. Ein Syntaxdiagramm erklärt (wie eine BNF-Grammatik) einen syntaktischen Begriff. Es besteht aus Rechtecken, Ovalen und Pfeilen. Nichtterminale stehen in Rechtecken Terminale stehen in Ovalen Pfeile führen von einem Sprachelement zum anderen Jedes Syntaxdiagramm besitzt genau einen Eingangs- und genau einen Ausgangspfeil.

Beispiele für Syntaxdiagramme 15 Satz : Subjekt Prädikat Objekt Beispiel: Ziffer = 0 1 2... 9 Ziffer : 0 1 2... 8 9 Beispiel: Zahl : Zahl = Ziffer Zahl Ziffer Zahl Ziffer Ziffer

Korrespondenz von Syntaxdiagrammen und BNF 16 Jeder BNF-Operator läßt sich durch ein Syntaxdiagramm ausdrücken: Auswahl: E1 E2 wird repräsentiert durch eine Verzweigung. E1 E2 Komposition: E1 E2 wird repräsentiert durch Hintereinanderfügen E1 E2 Option: [E] wird repräsentiert durch E Wiederholung: E

Korrespondenz von Syntaxdiagrammen und BNF 17 Umgekehrt lässt sich jedes Syntaxdiagramm durch eine BNF-Grammatik ausdrücken. Folgerung: BNF und Syntaxdiagramme sind äquivalent in dem Sinne, dass sie die gleiche Klasse von (formalen) Sprachen beschreiben. Bemerkung: Man nennt sie die Klasse der kontextfreien Sprachen, da Nichtterminalsymbole ohne Berücksichtigung ihrer benachbarten Symbole (d.h. ohne Berücksichtigung des Kontexts) durch Ausdrücke (nämlich durch die rechte Seiten der zugehörigen Regeln) ersetzt werden. Beispiel für eine nicht-kontextfreie Sprache: Die Sprache bestehend aus allen Wörtern der Form a n b n c n mit n>=1, d.h. alle Wörter der Form abc, aabbcc, aaabbbccc, aaaabbbbbcccc,...

18 Beispiel für BNF und Syntaxdiagramme: Palindrome Ein Palindrom ist ein Wort, das von links wie von rechts gelesen das Gleiche ergibt. Palindrome sind: "Ein Neger mit Gazelle zagt im Regen nie" ANNA ANANA NN A Kein Palindrom: ANANAS ANAN ANAAA

19 Beispiel für BNF und Syntaxdiagramme: Palindrome BNF-Form: Die folgende Grammatik beschreibt alle Palindrome, die mit den Terminalzeichen "A" und "N" gebildet werden können. Palindrom "A", "N Palindrom = "A "N Nichtterminalsymbol Terminalsymbole "einfachste Fälle, Abbruchfälle" "A" [Palindrom] "A "N" [Palindrom] "N"

20 Beispiel für BNF und Syntaxdiagramme: Palindrome Syntaxdiagramm: Palindrom : A N A N Palindrom Palindrom A N

21 Zusammenfassung Die Backus-Naur Form (BNF) und Syntaxdiagramme sind Formalismen zur Definition der Syntax von Programmiersprachen. Eine BNF-Grammatik besteht aus einer Menge von BNF-Regeln und einem Startsymbol. Jede BNF-Grammatik G definiert eine Menge L(G) von Wörtern, die als Sprache von G bezeichnet wird. Ein Syntaxdiagramm ist ein zu BNF äquivalenter grafischer Formalismus, bei dem Nichtterminalsymbole in Rechtecken Terminalsymbole in Ovale repräsentiert werden und Pfeile von einem Sprachelement zum anderen führen; dabei besitzt jedes Syntaxdiagramm genau einen Eingangs- und genau einen Ausgangspfeil.