Programmieren I Formale Sprachen KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Formale Sprachen: Motivation Sprachen werden eingeteilt in: Natürliche Sprachen oder Umgangssprachen (werden gesprochen und dienen der Kommunikation) Künstliche oder Formale Sprachen (werden benutzt, um Sachverhalte möglichst genau aufzuschreiben, z.b. in der Mathematik, Logik und Informatik) Eine Formale Sprache ist eine Menge von Symbolanordnungen, die vorgegebenen Regeln entsprechen Formale Sprachen definieren welche Ausdrücke erlaubt sind (Syntax) nicht die Bedeutung (Semantik) von Ausdrücken 2 W. Süß, T. Schlachter
Formale Sprachen: Motivation Beispiele Datenaustausch: Sender und Empfänger müssen sich auf gemeinsames Format einigen Spezialfall Programmiersprachen 1 : Was sind korrekte Ausdrücke? class EinfacheKlasse {int datum;} ist ein korrekter Java-Ausdruck class EinfacheKlasse (int datum) ist kein korrekter Java-Ausdruck 1) Sender ist der Programmierer, Empfänger ist der Übersetzer (Compiler) 3 W. Süß, T. Schlachter
Anwendung: Datenaustausch Sender Beispiele: Empfänger Dokumente im Internet: Datenaustauschformate HTML, XML, PDF Austausch zwischen betrieblichen Informationssystemen Elektronischer Datenaustausch zwischen Unternehmen Zum elektronischen Datenaustausch müssen sich Sender und Empfänger auf ein Austauschformat einigen. Der Empfänger muss erkennen, ob Daten(format) korrekt sind/ist was sie bedeuten Kunde Rechnung Bestellung Lieferant 4 W. Süß, T. Schlachter
Syntax, Semantik und Pragmatik einer Sprache Syntax (Sprachliche Form): Legt fest, welche Ausdrücke erlaubt sind Java: Nach dem Wort class folgt ein Wort und anschließend eine in geschweifte Klammern eingeschlossene Zeichenfolge Semantik (Bedeutung): Legt die Bedeutung eines Ausdrucks der Sprache fest Java: das Schlüsselwort class leitet eine Klassendefinition ein; das Wort direkt nach class ist der Name der Klasse Deutsch: Der Baum blüht. und Der Baum spaziert. sind nach der gleichen Regel aufgebaute, syntaktisch korrekte Sätze mit unterschiedlicher (mehr oder weniger sinnvoller) Bedeutung. Pragmatik: Regelt die Einbettung der Bedeutung in den Kontext 5 W. Süß, T. Schlachter
Beispiel für Syntax, Semantik und Pragmatik Satz: Wie spät ist es? Die Syntax regelt den grammatikalischen Aufbau der Frage. Wie spät ist es! wäre syntaktisch falsch. Die Semantik zeigt, dass eine Frage nach einer Uhrzeit zum Zeitpunkt des Aussprechens gemeint ist. Die Pragmatik zeigt, dass der Sprechende eine Aufforderung an den Hörer hat und dass eine Reaktion von diesem zu recht erwartet werden kann. Der Hörer steht mit der Annahme der Frage in der Pflicht der Frage bzw. Bitte um Antwort nachzukommen. Pragmatisch falsch wäre die Reaktion: Es ist nie zu spät, ein guter Mensch zu werden [I. Kant], obwohl dies inhaltlich (semantisch) sinnvoll wäre. 6 W. Süß, T. Schlachter
Formale Sprachen Formale Sprache definiert, welche Ausdrücke erlaubt sind Zulässige Zeichen Regeln für die Zusammensetzung der Zeichen Sender und Empfänger befolgen die gleichen Regeln Sprache ist eindeutig beschrieben Korrektheit eines Ausdrucks ist nachprüfbar Formale Sprachen haben folgende Eigenschaften Alle Zeichen sind explizit definiert Alle syntaktischen Regeln sind explizit definiert Alle semantischen Regeln sind explizit definiert oder vollständig weggelassen Es gibt keine Pragmatik 7 W. Süß, T. Schlachter
Alphabet Gegeben sei A Alphabet: eine Menge von Zeichen (auch Zeichenvorrat genannt) Dann ist A* die Menge aller Zeichenketten, die man aus A bilden kann, einschließlich der leeren Kette "" Für die leere Kette schrieben wir auch den griechischen Buchstaben (sprich: Lambda ) A+ Die Menge aller Zeichen, die man bilden kann ohne die leere Kette Beispiele: A = {"a", "b", "c"} A* = {, "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc", "ca", "cb", "cc", "aaa", "aab", "aac", "aba", "abb",...} 8 W. Süß, T. Schlachter
Sprache Eine Teilmenge L A* nennt man Sprache über dem Alphabet A. Die Elemente von L heißen Wörter der Sprache L (oder auch Ketten der Sprache L). Beispiel: Gegeben sei das Alphabet A = {"a", "b", "c"}. L 1 sei die Sprache über A, in der alle Wörter mit "a" beginnen und aufhören. Dann sind folgende Ketten Wörter von L 1 "a", "aa", "aaa", "aba", "aca", "aaaa", "aaba", "accca",... Keine Wörter von L 1 sind dagegen: "", "b", "c", "ab", "ca", "bcc",... 9 W. Süß, T. Schlachter
Grammatik Grammatik: Lehre von der Wortbildung und -flexion (Morphologie) sowie von der Verwendung der Wörter im Satz (Syntax) Die meisten Sprachen sind unendlich, so dass man durch Aufzählung der Wörter die Sprache nicht definieren kann Eine Grammatik ist eine allgemeine, eindeutige Beschreibung der Syntax einer Sprache Eine Grammatik soll eine endliche Beschreibung haben 10 W. Süß, T. Schlachter
Grammatik Eine Grammatik G=(T,N,P,S) besteht aus 4 Teilen: T N P S die Menge der Terminalsymbole, aus denen die Wörter der Sprache gebildet werden. Terminalsymbole sind Zeichen des zugrunde liegenden Alphabets. die Menge der Nichtterminalsymbole (Hilfssymbole); sie treten in der Sprache nicht auf, sondern müssen durch Terminalsymbole ersetzt werden. die Menge der Produktionen (auch Produktionsregeln oder Regeln genannt). Eine Regel X Y besagt, dass ein Teilwort X durch ein Teilwort Y ersetzt werden kann, wobei X und Y aus Terminal- und Nichtterminalsymbolen bestehen können. das Startsymbol (ein spezielles Element aus N), von dem ausgehend die Produktionen angewandt werden. 11 W. Süß, T. Schlachter
Beispiel: Grammatik für L 1 Die folgende Grammatik beschreibt die Menge aller Wörter über dem Alphabet {"a", "b", "c"}, die mit "a" beginnen und enden: T = { "a", "b", "c"} N = { Wort, Buchstabe, Teilwort } P = { Wort "a" Teilwort "a", Wort "a", Teilwort Buchstabe Teilwort, Teilwort, Buchstabe "a", Buchstabe "b", Buchstabe "c" } S = Wort 12 W. Süß, T. Schlachter
Backus-Naur-Form (BNF) In der Informatik hat eine besondere Form zur Beschreibung einer Grammatik weite Verbreitung gefunden: Die Backus-Naur-Form (BNF) Die BNF wird vor allem für die Definition von Programmiersprachen verwendet Die linke Seite jeder Regel besteht aus genau einem Nichtterminalsymbol (die BNF ist eine Darstellung für kontextfreie Grammatiken) Die rechte Seite einer Regel besteht aus beliebig langen Ketten, die Terminal- und Nichtterminalsymbole enthalten kann die rechte Seite ist also ein Element aus (T N)* die leere rechte Seite ( ) ist erlaubt Linke und rechte Seite einer Regel werden durch das Zeichen ::= voneinander getrennt 13 W. Süß, T. Schlachter
Beispiel: Grammatik für L 1 in BNF T = { "a", "b", "c" } N = { Wort, Buchstabe, Teilwort } P = { Wort "a" Teilwort "a", (1) Wort "a", (2) Teilwort Buchstabe Teilwort, (3) Teilwort, (4) Buchstabe "a", (5) Buchstabe "b", (6) Buchstabe "c" (7) } S = Wort 14 W. Süß, T. Schlachter
Erweiterte Backus-Naur-Form (EBNF) Weil BNF-Grammatiken unübersichtlich werden können, wurde die BNF um einige Abkürzungsmöglichkeiten erweitert. Dies führt zur erweiterten Backus-Naur-Form (EBNF) Es gibt verschiedene Varianten der EBNF Eine gebräuchliche sieht folgende Abkürzungsmöglichkeiten vor: der senkrechte Strich trennt Alternativen [ ] eckige Klammern enthalten optionale Bestandteile { } geschweifte Klammern enthalten Bestandteile, die null, ein oder mehrfach wiederholt werden dürfen { }+ geschweifte Klammern mit + enthalten Elemente, die ein oder mehrfach wiederholt werden können 15 W. Süß, T. Schlachter
Beispiel: Grammatik für L 1 in EBNF T = { "a", "b", "c" } N = { Wort, Buchstabe, Teilwort } P = { Wort "a" Teilwort "a" a, (1+2) Teilwort Buchstabe Teilwort, (3+4) Buchstabe "a" "b" "c" (5-7) } S = Wort 16 W. Süß, T. Schlachter
Sprache einer Grammatik Eine Sprache L einer Grammatik G ist die Menge aller Wörter, die durch die Grammatik abgeleitet werden können, d.h. die Wörter die aus S durch Anwendung von Produktionsregeln erzeugt werden kann, wobei alle Nichtterminalsymbole durch Terminalsymbole ersetzt worden sind. Mathematische Definition: Sei G=(T,N,P,S) eine Grammatik. Dann heißt L(G) = {w T* S w} die von G erzeugte formale Sprache. Eine Sprache entsteht also als Menge von Zeichenketten durch Anwendung von Produktionen einer Grammatik. 17 W. Süß, T. Schlachter
Herleitung eines Wortes aus einer BNF-Grammatik Herleitung eines Wortes lässt sich als Baum darstellen Beispiel: "abca" ist eine Wort der Sprache L 1 : Wort (1) "a" Teilwort "a" (3) Buchstabe Teilwort (6) (3) "b" Buchstabe Teilwort (7) (4) "c" Die fett gedruckten Zeichen bilden das erzeugte Wort. 18 W. Süß, T. Schlachter
Erkennen von gültigen Ausdrücken einer Sprache Eine wichtige Anwendung einer Grammatik ist zu erkennen, ob eine Zeichenkette zu einer Sprache gehört Beispiel: Analysephase beim Compilieren Für die Erkennung von Zeichenketten werden die Regeln rückwärts angewendet Erkennung der Korrektheit von Ausdrücken Zuordnung von Ausdrücken zu semantischen Einheiten Dieser Vorgang heißt parsen (engl. to parse - analysieren) Parser sind Bestandteile von Compilern aber auch z.b. von WWW-Browsern (um HTML-Code zu erkennen) 19 W. Süß, T. Schlachter
Sprache - ein zweites Beispiel Gegeben sei das Alphabet A = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "-", "*", "/", "(", ")"} Die Menge L A der arithmetischen Ausdrücke ist eine Sprache über A, z.b. 122+4 8*(4+177/3-(11*(18+7))) 13 Die folgenden Wörter sollen nicht zu L A gehören: 28(18 ++/-5 20 W. Süß, T. Schlachter
Beispiel: EBNF-Grammatik für die Sprache L A der arithmetischen Ausdrücke T = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", " ", "*", "/", "(", ")" } N = { Ausdruck, Term, Faktor, Zahl, Ziffer } P = { Ausdruck ::= Term Term "+" Term Term " " Term Term ::= Faktor Faktor "*" Faktor Faktor "/" Faktor Faktor ::= Zahl "(" Ausdruck ")" Zahl ::= {Ziffer}+ Ziffer ::= "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" } S = Ausdruck 21 W. Süß, T. Schlachter
Kontextfreie Grammatiken Im Allgemeinen können rechte und linke Seite von Produktionen aus beliebigen Kombinationen von Terminalund Nichtterminalsymbolen bestehen Die für die Informatik wichtigste Kategorie von Grammatiken sind diejenigen, deren Mengen N, T, und P nicht leer und endlich sind und deren Produktionen auf der linken Seite aus genau einem Nichtterminalsymbol bestehen Diese Grammatiken heißen kontextfrei Die Anwendung von Produktionen einer kontextfreien Grammatik führt zu einer hierarchischen Verfeinerung Wörter einer kontextfreien Sprache können einfach generiert und erkannt werden (E)BNF-Grammatiken sind kontextfrei 22 W. Süß, T. Schlachter
Syntaxdiagramme Eine mit BNF eng verwandte Form von Grammatik sind die Syntaxdiagramme. Ein Syntaxdiagramm entspricht einer EBNF-Regel (bzw. mehreren BNF-Regeln, welche die gleiche linke Seiten haben). Das Hilfssymbol auf der linken Seite entspricht dem Titel des Diagramms. Hilfssymbole der rechten Seite werden durch Rechtecke, Terminalsymbole durch Kreise dargestellt 23 W. Süß, T. Schlachter
Beispiel: Syntaxdiagramme für die Sprache L A der arithmetischen Ausdrücke Ausdruck Faktor Term Term + Zahl Ausdruck ( ) Term Zahl Faktor Faktor * / Ziffer Ziffer 0 1 2 3 4 5 6 7 8 9 24 W. Süß, T. Schlachter
Metasprachen BNF und EBNF sind formale Sprachen, die dazu da sind, über formale Sprachen etwas zu sagen (nämlich ihre Syntax zu definieren) Eine Sprache, in der man über eine andere Sprache spricht, nennt man Metasprache Die Zeichen dieser Sprachen, die nicht Terminal- oder Hilfssymbole sind, heißen Metasymbole In BNF sind " und ::= Metasymbole In EBNF sind ", ::=,, [, ], { und } Metasymbole 25 W. Süß, T. Schlachter
Anwendungen von Grammatiken Es gibt viele Anwendungen für Grammatiken nicht nur in den Definitionen der Programmiersprachen, z.b. Aufbau von Kommandos (Shell, COMMAND.COM) Beschreibung von Protokollen (TCP, IP, HTTP, SOAP) Aufbau von Mustern (Pattern-Matching), z.b. für Shell oder Editoren (substitute-kommando) Reguläre Ausdrücke Aufbau von SQL-Kommandos Aufbau von URI/URL (Web-Adressen) Aufbau von Dokumenten (HTML, XML) 26 W. Süß, T. Schlachter
Formale Sprachen im Internet: Anwendungen HTML (HyperText Markup Language) XML (extensible Markup Language) 1997 XML 1992 HTML WWW 1986 SGML 1960 Generalized Markup Internet 27 W. Süß, T. Schlachter
Aufbau einer HTML Seite Document Type Definition (DTD) HEAD-Bereich Dokumentinformation/Metadaten (Titel, Autor, Zeichensatz, Keywords, etc.) Body-Bereich Eigentliches Dokument, (Nutz-)Inhalt 28 W. Süß, T. Schlachter
Beispiel einer einfachen HTML-Seite <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/tr/html4/strict.dtd"> <html> <head> <title>vorlesung Programmieren</title> </head> <body> <h1>formale Sprachen</h1> <p>viel Spaß bei der Vorlesung!</p> </body> </html> 29 W. Süß, T. Schlachter
(Eingeschränkte) Grammatik für HTML-Dokumente T = { "A",.., "Z", "a",..,"z", "0", "1",..,"9", " ", " ; ", " &",".",": ","!", "<html>", "</html>", "<head>", "</head>", "<body>", "</body>", "<title>", "</title>", "<p>", "</p>", "<h1>", "</h1> } N = { HTML-Dokument, Dokumentinhalt, Kopf, Rumpf, Überschrift, Absatz, Text } P = { HTML-Dokument ::= <html>dokumentinhalt</html> Dokumentinhalt ::= <head>kopf</head><body>rumpf</body> Kopf ::= <title>text</title> Rumpf ::= {Überschrift Absatz}* Überschrift ::= <h1>text</h1> Absatz ::= <p>text</p> Text ::= {"A" "B".. "Z" "a" "b".. "z" "0".. "9" " " "; " "&" ". " ":" "! "}* } S = HTML-Dokument 30 W. Süß, T. Schlachter
HTML HyperText Markup Language Vorteile Weite Verbreitung ( Sprache des WWW ) Einfachheit Unterstützung durch gängige Software (Web-Browser) Standardisiert Nachteile Nicht erweiterbar Keine Trennung zwischen Semantik und Darstellung Ansätze zur Trennung bestehen: Cascading Stylesheets (CSS) Document Style Semantics and Specification Language (DSSSL) 31 W. Süß, T. Schlachter
XML extensible Markup Language Konsequente Trennung zwischen Darstellung und Repräsentation Erweiterbar, eigene Tags können definiert werden Maschinen les- und prüfbar Kein Ersatz für HTML, aber Ergänzung in vielen Bereichen Für normales Homepage-Design ist XML relativ uninteressant. HTML und CSS sind dafür längst zu leistungsfähig und angesichts ihrer Verbreitung kaum noch zu verdrängen 32 W. Süß, T. Schlachter
XML: Trennung Inhalt, Struktur, Format Inhalt XML Struktur DTD, XML-Schema Format CSS, XSL, XSLT XML extensible Markup Language DTD Document Type Definition CSS - Cascading StyleSheet XSL extensible Style Language XSLT XSL Transformation 33 W. Süß, T. Schlachter
XML: Formale Sprache und Grammatik Formale Sprache Inhalt XML Struktur DTD, XML-Schema Format CSS, XSL, XSLT Grammatik Layout 34 W. Süß, T. Schlachter
Gültigkeit von XML-Dokumenten Formale Sprache XML Grammatik DTD oder XML-Schema PARSER XML Validiertes Dokument 35 W. Süß, T. Schlachter
Eigenschaften von XML-Dokumenten Wohlgeformtheit (wellformed) Dokument syntaktisch korrekt? Passender Aufbau des XML-Dokumentes Korrekte Verschachtelung von Tags Attribute in " " Keine offenen Tags Gültigkeit (valid) Wohlgeformtheit und Entspricht einer DTD 36 W. Süß, T. Schlachter
XML-Dokumente und DTD XML-Dokument <hotel id="h0001"> <name> Strand Hotel Hübner </name> <kategorie>4</kategorie> </hotel> DTD <!ELEMENT hotel (name, kategorie)> <!ATTLIST hotel id ID #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT kategorie (#PCDATA)> 37 W. Süß, T. Schlachter
Strukturdefinition für XML-Dokumente DTDs einfach kompakt gut lesbar keine XML-Syntax XML-Schema wesentlich mehr Darstellungsmöglichkeiten Datentypen XML-Syntax 38 W. Süß, T. Schlachter
XML-Dokumente und XSL Stylesheets PDF XSL Stylesheet Layout: Drucker XSL Stylesheet HTML XML Validiertes Dokument XSL Stylesheet Layout: Browser WML XSL Stylesheet XML Layout: Handy Layout: Externe Anwendung 39 W. Süß, T. Schlachter
XML-Anwendungen Datenaustausch SOAP (Simple Object Access Protocol) *.docx, *.odt Naturwissenschaft MathML Mathematische Formelsprache CML Chemical Markup Language BSML Bioinformatic Sequence Markup Language BioML Biopolymer Markup Language SVG Scalable Vector Graphics XHTML XML-konforme Neudefinition von HTML Allgemein: Strukturierte Informationen 40 W. Süß, T. Schlachter