Formale Sprachen und Automaten

Slides:



Advertisements
Ähnliche Präsentationen
Vorlesung Compilertechnik Sommersemester 2008
Advertisements

Grenzen endlicher Automaten
Extensible Markup Language
Worzyk FH Anhalt Datenbanksysteme für FÜ WS 2004/2005 XML - 1 XML Extensible Markup Language.
DTD XML-Technik Dino Azzano. Definition Document Type Definition Beschreibung der Regeln zum Aufbau aller XML-Dokumente, die zu einer Dokumentklasse.
Anmerkungen zu XML Im September 2000 Entwicklung/Anspruch von XML
Institut für Informatik Abt. Intelligente Systeme
8. Formale Sprachen und Grammatiken
Ontologien- Query 1 Teil2
Untersuchung und szenariobasierte Entwicklung von Websites zur Orientierung in Universitätsstudiengängen unter Berücksichtigung von Prinzipien des Web.
XML - Aufbau und Struktur - mit Einsatz im B2B
Hands On – Einführung in XML
IMS Universität Stuttgart 1 Einführung in XML Hannah Kermes HS: Elektronische Wörterbücher Do,
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Automatentheorie „Berechnungsmodell für logische Sprachen“
Stoyan Mutafchiev Betreuer: Ilhan, Tim
DOM (Document Object Model)
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (06 – Reduktion endlicher Automaten) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (12 – Kellerautomaten, PDA) Prof. Dr. Th. Ottmann.
HTML - Eine erste Annäherung
M a r c – o l i v e r p a h l Informatik II – Kapitel 18 Übersetzung Zusammenfassung des Kapitel 18 Küchlin, Weber, Vorversion Einführung in die Informatik,
Prof. Dr. rer.nat. Ralph Großmann Fakultät Informatik / Mathematik Sommersemester 2012 Internet-Technologien XML-basierte Techniken Teil Metasprache der.
Wieso muss es Informatikunterricht in einer Schule geben ?
Grundkurs Theoretische Informatik, Folie 3.1 © 2004 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 3 Gottfried Vossen Kurt-Ulrich Witt.
XML-Parser Manuel Röllinghoff.
Reguläre Sprachen Karin Haenelt.
© Karin Haenelt 2006, Äquivalenzen Reg.Ausdrücke, Reg.Sprachen, EA ( ) 1 Reguläre Sprachen Karin Haenelt.
Sprachwissenschaftliches Institut Einführung in die HPSG Grammatiktheorie 4./11. Mai 2004.
© 2002 Prof. Dr. G. Hellberg 1 XML-Seminar XML-Technologie: XML in Theorie und Praxis Prof. Dr. G. Hellberg XML-Technologie: XML in Theorie und Praxis.
Modularization of XHTML™
Überblick XML: Extensible Markup Language Entwickelt, um Informationen bereitzustellen, zu speichern und zu übertragen Im Gegensatz zu HTML keine vordefinierten.
Einführung XML XML Einführung Andreas Leicht.
Beispiele für Ausdrucksalgebren
Christian Schindelhauer
Christian Schindelhauer
1 Grundlagen und Anwendung der Extensible Markup Language (XML ) Peter Buxmann Institut für Wirtschaftsinformatik Johann Wolfgang Goethe-Universität Frankfurt.
Was versteht man unter XML Schema?
Für U2 an der FH in Bingen von Dipl. Inform. (FH) Heidi HannaH Daudistel.
Ein Automatensimulator
Java für Fortgeschrittene
Theorie formaler Sprachen
Formale Sprachen Teil 3 Klaus Becker Syntax und Semantik.
Formale Sprachen Teil 1 Klaus Becker 2006.
Formale Sprachen Grammatiken und die Chomsky-Hierarchie
Eine Präsentation von Lena Sauter & Corinna Nawatzky
Formale Sprachen Reguläre Sprachen Rudolf FREUND, Marian KOGLER.
Natürliche und künstliche Sprachen
XML (Extensible Markup Language)
Städtisches Gymnasium Beverungen Friedel Berlage
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
Beispiele: KFG 2.Teil Beispiel 1: Sei G eine Grammatik mit den folgenden Regeln: S  Ac | Bd A  aAb | ab B  aBbb | abb Definieren Sie.
Noam CHOMSKY, Sheila GREIBACH
Barrierefreies Webdesign Überarbeitung der Homepage
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 3: Potenzreihen und kontextfreie Sprachen (Vgl. Buch von A. Salomaa)
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Christian Schindelhauer Wintersemester 2006/07 3. Vorlesung
Christian Schindelhauer Wintersemester 2006/07 2. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
Mensch – Maschine - Kommunikation
Der Hund jagt die Katze. Theoretische Informatik Satz S P O
Berechenbarkeit Klaus Becker Berechenbarkeit.
Institut für Softwarewissenschaft – Universität WienP.Brezany 1 Beispiele (Frist: ) Beispiel 1: Sei  = {a, b} ein Alphabet und Q = {q 0, q 1 } eine.
7. Formale Sprachen und Grammatiken
Hauptseminar Web-Services und verteilte Datenbanken Thema XML, DTDs und XML-Schema XML, DTDs und XML-Schema - Stefan Kurz, 25. April 2003.
- Warum: Das HTML-Dilemma
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
Kapitel 4:Die Chomsky Hierarchie
Seminar zur Geoinformation Folie 1 Inhalt: –XML –XML- SCHEMA –XSL –Syntax –GML Seminar zur Geoinformation Datenaustausch mit XML / GML im InternetDatenaustausch.
 Präsentation transkript:

Formale Sprachen und Automaten Klaus Becker 2004

Formale Sprachen ! Terminalsymbole ATagZustand = '<' z '>' ETagZustand = '<' '/' z '>' ATagZustandsmenge = '<' z m '>' ETagZustandsmenge = '<' '/' z m '>' Bezeichner = {Alphanumeric}+ ! Produktionen "Start Symbol" = <Zustandsmenge> <Zustand> ::= ATagZustand Bezeichner ETagZustand <Zustaende> ::= <Zustand> <Zustaende> ::= <Zustand> <Zustaende> <Zustandsmenge> ::= ATagZustandsmenge <Zustaende> ETagZustandsmenge

Sprachbeschreibung und Spracherkennung Teil 1 Sprachbeschreibung und Spracherkennung

Exkurs: XML <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> <anfangszustand> <zustand>off</zustand> </anfangszustand> <ueberfuehrungsfunktion> <delta>off,Schalter,low</delta> <delta>low,Schalter,high</delta> <delta>high,Schalter,off</delta> </ueberfuehrungsfunktion> <ausgabefunktion> <lambda>off,Schalter,AnAus</lambda> <lambda>low,Schalter,AnAn</lambda> <lambda>high,Schalter,AusAus</lambda> </ausgabefunktion> </automat>

Was ist XML? <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> ... </automat> „XML (Abk. für extended markup language) ist eine Metasprache zur Beschreibung von Auszeichnungssprachen für allgemeine Dokumente.“ (Duden Informatik) Mit Hilfe von XML kann man Informationen strukturiert darstellen. Des weiteren kann man die Struktur (und die Formatierung) von Dokumenten festlegen, d. h. man kann die Sprache festlegen, in der die Dokumente verfasst werden müssen.

Darstellung von XML-Dokumenten <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> <anfangszustand> <zustand>off</zustand> </anfangszustand> <ueberfuehrungsfunktion> <delta>off,Schalter,low</delta> <delta>low,Schalter,high</delta> <delta>high,Schalter,off</delta> </ueberfuehrungsfunktion> <ausgabefunktion> <lambda>off,Schalter,AnAus</lambda> <lambda>low,Schalter,AnAn</lambda> <lambda>high,Schalter,AusAus</lambda> </ausgabefunktion> </automat> XML-Dokument Browser-Ansicht

Ein fehlerhaftes Dokument <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high<zustand> </zustandsmenge> <anfangszustand> <zustand>off</zustand> </anfangszustand> ... </automat> Der Browser erkennt, wenn ein allgemeiner Syntaxfehler vorliegt (hier: kein passendes Ende-Tag gefunden).

Noch ein fehlerhaftes Dokument <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> <!-- kein Anfangszustand --> <ueberfuehrungsfunktion> <delta>off,Schalter,low</delta> <delta>low,Schalter,high</delta> <delta>high,Schalter,off</delta> </ueberfuehrungsfunktion> ... </automat> Der Browser erkennt aber nicht, wenn ein spezieller Syntaxfehler vorliegt (hier: betrifft die vom Benutzer vorgesehene Struktur des Dokuments).

Festlegung der Dokumentenstruktur <?xml version="1.0"?> <!DOCTYPE automat [ <!ELEMENT automat (zustandsmenge?, anfangszustand, eingabemenge?, ausgabemenge?, ueberfuehrungsfunktion, ausgabefunktion)> <!ATTLIST automat name CDATA #REQUIRED> <!ELEMENT zustandsmenge (zustand)+> <!ELEMENT anfangszustand (zustand)> <!ELEMENT zustand (#PCDATA)> <!ELEMENT eingabemenge (eingabe)+> <!ELEMENT eingabe (#PCDATA)> <!ELEMENT ausgabemenge (ausgabe)+> <!ELEMENT ausgabe (#PCDATA)> <!ELEMENT ueberfuehrungsfunktion (delta)*> <!ELEMENT delta (#PCDATA)> <!ELEMENT ausgabefunktion (lambda)*> <!ELEMENT lambda (#PCDATA)> ] > <automat name="Klimaanlage2">...</automat>

Dokument mit festgelegtem Typ <?xml version="1.0"?> <!DOCTYPE automat [ <!ELEMENT automat (zustandsmenge?, anfangszustand, eingabemenge?, ausgabemenge?, ueberfuehrungsfunktion, ausgabefunktion)> <!ATTLIST automat name CDATA #REQUIRED> <!ELEMENT zustandsmenge (zustand)+> <!ELEMENT anfangszustand (zustand)> <!ELEMENT zustand (#PCDATA)> <!ELEMENT eingabemenge (eingabe)+> <!ELEMENT eingabe (#PCDATA)> <!ELEMENT ausgabemenge (ausgabe)+> <!ELEMENT ausgabe (#PCDATA)> <!ELEMENT ueberfuehrungsfunktion (delta)*> <!ELEMENT delta (#PCDATA)> <!ELEMENT ausgabefunktion (lambda)*> <!ELEMENT lambda (#PCDATA)> ] > <automat name="Klimaanlage2">...</automat>

Aktivierung des Parser <HTML> <HEAD> <TITLE>Automatenbeschreibungstest</TITLE> <SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD"> Document = Test.XMLDocument; message = "parseError.errorCode: „ + Document.parseError.errorCode + "\nl„ + "parseError.filepos: „ + Document.parseError.filepos + "\nl„ + "parseError.line: „ + Document.parseError.line + "\nl„ + "parseError.linepos: „ + Document.parseError.linepos + "\nl„ + "parseError.reason: „ + Document.parseError.reason + "\nl„ + "parseError.srcText: „ + Document.parseError.srcText; alert (message); </SCRIPT> </HEAD> <BODY> <XML ID="Test" SRC="Klimaanlage2.XML"></XML> <H2>DTD Automatentest</H2> </BODY> </HTML> nach J. Müller: XML, Teil 4. In: LOG IN 122/123 (2003)

Korrekte Automatenbeschreibung <?xml version="1.0"?> <!DOCTYPE automat [ ... ] > <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> <anfangszustand> <zustand>off</zustand> </anfangszustand> ... </automat> <HTML> <HEAD> <TITLE>Automatenbeschreibungstest</TITLE> <SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD"> Document = Test.XMLDocument; message = "parseError.errorCode: „ + Document.parseError.errorCode + "\nl„ + "parseError.filepos: „ + Document.parseError.filepos + "\nl„ + "parseError.line: „ + Document.parseError.line + "\nl„ + "parseError.linepos: „ + Document.parseError.linepos + "\nl„ + "parseError.reason: „ + Document.parseError.reason + "\nl„ + "parseError.srcText: „ + Document.parseError.srcText; alert (message); </SCRIPT> </HEAD> <BODY> <XML ID="Test" SRC="Klimaanlage2.XML"></XML> <H2>DTD Automatentest</H2> </BODY> </HTML> Der Parser überprüft die Dokumentenstruktur.

Fehlerhafte Automatenbeschreibung <?xml version="1.0"?> <!DOCTYPE automat [ ... ] > <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> <!-- kein Anfangszustand --> ... </automat> <HTML> <HEAD> <TITLE>Automatenbeschreibungstest</TITLE> <SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD"> Document = Test.XMLDocument; message = "parseError.errorCode: „ + Document.parseError.errorCode + "\nl„ + "parseError.filepos: „ + Document.parseError.filepos + "\nl„ + "parseError.line: „ + Document.parseError.line + "\nl„ + "parseError.linepos: „ + Document.parseError.linepos + "\nl„ + "parseError.reason: „ + Document.parseError.reason + "\nl„ + "parseError.srcText: „ + Document.parseError.srcText; alert (message); </SCRIPT> </HEAD> <BODY> <XML ID="Test" SRC="Klimaanlage4.XML"></XML> <H2>DTD Automatentest</H2> </BODY> </HTML> Der Parser erkennt einen Syntaxfehler.

Übersicht Aus: M. Näf: Einführung in XML, DTD und XSL. www.internet-kompetenz.ch/xml/

Zielsetzung Ziel ist es, Verfahren zur präzisen Festlegung von Sprachen (wie der Automatenbeschreibungssprache) zu entwickeln. <?xml version="1.0"?> <!DOCTYPE automat [ <!ELEMENT automat (zustandsmenge?, anfangszustand, eingabemenge?, ausgabemenge?, ueberfuehrungsfunktion, ausgabefunktion)> <!ATTLIST automat name CDATA #REQUIRED> <!ELEMENT zustandsmenge (zustand)+> <!ELEMENT anfangszustand (zustand)> <!ELEMENT zustand (#PCDATA)> <!ELEMENT eingabemenge (eingabe)+> ... ] > <automat name="Klimaanlage2">...</automat>

Zielsetzung Ziel ist es, Systeme zu entwickeln, mit deren Hilfe man entscheiden kann, ob eine „sprachliche Beschreibung“ (wie eine Automatenbeschreibung) korrekt oder fehlerhaft ist. <?xml version="1.0"?> <!DOCTYPE automat [ ... ] > <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> <!-- kein Anfangszustand --> ... </automat>

Sprachbeschreibung mit Grammatiken Teil 2 Sprachbeschreibung mit Grammatiken

Die Sprache der Zustandsmengen Das präzise Festlegen einer Sprache soll zunächst anhand einer übersichtlichen, vereinfachten Teilsprache der XML-Automatenbeschreibungssprache entwickelt werden. Wir betrachten hierzu die Beschreibung von Zustandsmengen, die in verkürzter Form dargestellt werden. <zm> <z>z0</z> <z>z1</z> <z>z2</z> <z>z21</z> <z>z3</z> </zm>

Informelle Beschreibung <zm> <z>z0</z> <z>z1</z> <z>z2</z> <z>z21</z> <z>z3</z> </zm> Regeln: /1/ Eine Zustandsmengenbeschreibung wird durch die Tags <zm> und </zm> eingeschlossen. /2/ Sie enthält beliebig viele, aber mindestens einen Zustand. /3/ Jeder Zustand wird durch die Tags <z> und </z> eingeschlossen. ...

Das Alphabet einer Sprache Jede Sprache benutzt bestimmte Zeichen, um Wörter bzw. Sätze zu bilden. Die Menge  der zulässigen Zeichen wird Alphabet genannt. Ein Alphabet ist somit eine endliche (geordnete) Menge von Zeichen. Zustandsmengenbeschreibung: <zm><z>z0</z><z>z1</z><z>z2</z><z>z21</z><z>z3</z></zm> Das Alphabet der Zustandsmengen-Sprache:  = {<, >, /, a, ..., z, A, ..., Z, 0, ..., 9}

Wörter über einem Alphabet Durch Hintereinanderreihung endlich vieler Zeichen aus dem vorgegebenen Alphabet  erhält man Wörter (über dem Alphabet). Die Menge aller möglichen Wörter über einem Alphabet  wird mit * bezeichnet. Zu dieser Menge gehört auch das sogenannte leere Wort , das keine Zeichen enthält. Das Alphabet der Zustandsmengen-Sprache:  = {<, >, /, a, ..., z, A, ..., Z, 0, ..., 9} Wörter über diesem Alphabet: <zm><z>z0</z><z>z1</z><z>z2</z><z>z21</z><z>z3</z></zm> <zm><z>rotgelb</z></zm> <a><z3

Formale Sprachen Eine (formale) Sprache über einem Alphabet  ist eine Teilmenge von *. Wörter, die zur Zustandsmengen-Sprache gehören: <zm><z>z0</z><z>z1</z><z>z2</z><z>z21</z><z>z3</z></zm> <zm><z>rotgelb</z></zm> Wörter, die nicht zur Zustandsmengen-Sprache gehören: <a><z3 <zm><z>rotgelb<z><zm> Problem: Festlegung aller Wörter, die zur Sprache gehören

Syntaxdiagramme ATagZustand ETagZustand ATagZustandsmenge < z > ETagZustand < / z > ATagZustandsmenge < z m > ETagZustandsmenge < / z m >

AlphanumerischesZeichen Syntaxdiagramme AlphanumerischesZeichen a b ... A B ... 1 ... Bezeichner AlphanumerischesZeichen Zustand ATagZustand Bezeichner ETagZustand

Bestandteile von Syntaxdiagramme AlphanumerischesZeichen a b ... A B ... 1 ... Terminalsymbol Bezeichner AlphanumerischesZeichen Nichtterminalsymbol Terminalsymbole gehören zum Alphabet der Sprache. Nichtterminalsymbole sind Variablen, die als Platzhalter für syntaktische Einheiten fungieren.

Übung Ergänzen Sie die Sprachbeschreibung um Syntaxdiagramme für Zustandsmengen. Beachten Sie, dass eine Zustandsmenge beliebig viele, aber mindestens einen Zustand hat.

Lösung Zustandsmenge ATagZustandsmenge Zustand ETagZustandsmenge

Übersetzung in Produktionsregeln ATagZustand < z > <ATagZustand>  '<' 'z' '>'

Übersetzung in Produktionsregeln AlphanumerischesZeichen a b ... A B ... 1 ... <AlphanumerischesZeichen>  'a' <AlphanumerischesZeichen>  'b' ...

Übersetzung in Produktionsregeln Bezeichner AlphanumerischesZeichen <Bezeichner>  <AlphanumerischesZeichen> <Bezeichner>  <AlphanumerischesZeichen> <Bezeichner>

Übung Ergänzen Sie die fehlenden Produktionsregeln.

Lösung <Zustand>  <ATagZustand> <Bezeichner> <ETagZustand> <Zustaende>  <Zustand> <Zustaende>  <Zustand> <Zustaende> <Zustandsmenge>  <ATagZustandsmenge> <Zustaende> <ETagZustandsmenge>

Grammatik Eine Grammatik ist ein Tupel G = (T, N, P, S) bestehend aus - einer endlichen nichtleeren Menge T von Terminalzeichen, - einer endlichen nichtleeren Menge N von Nichtterminalzeichen, - einer endlichen Menge P von Produktionen (Regeln) und - einem Startsymbol S  N. Eine Produktion (Regel) hat die Gestalt u  v. Die linke Seite u und die rechte Seite v sind dabei Wörter über dem Alphabet V = T  N.

Backus-Naur-Form Die Backus-Naur-Form ist eine Kurzschreibweise für Produktionen. <AlphanumerischesZeichen>  'a' <AlphanumerischesZeichen>  'b' ... <AlphanumerischesZeichen> ::= 'a' | 'b' | .. | 'A' | 'B' | .. | '0' | .. <Bezeichner>  <AlphanumerischesZeichen> <Bezeichner>  <AlphanumerischesZeichen> <Bezeichner> <Bezeichner> ::= <AlphanumerischesZeichen> | <AlphanumerischesZeichen> <Bezeichner>

Übung Beschreiben Sie die gesamte Grammatik der Zustandsmengen-sprache in Backus-Naur-Form.

Wortproblem Gegeben: Wort über dem Alphabet T Beispiel: <zm><z>z0</z></zm> Gesucht: Ableitung des Wortes mit Hilfe der Produktionen der Grammatik ausgehend vom Startzustand Ableitung durch Wortersetzung: Eine Produktion u  v wird so interpretiert, dass u überall, wo es als Teil eines Wortes auftritt, durch v ersetzt werden darf.

Wort aus Terminalsymbolen Worterzeugung Gegeben: <zm><z>z0</z></zm> Gesucht: Ableitung des Wortes mit Hilfe der Produktionen Startsymbol <Zustandsmenge>  <ATagZustandsmenge> <Zustaende> <ETagZustandsmenge>  '<' 'zm' '>' <Zustaende> <ETagZustandsmenge>  '<' 'zm' '>' <Zustaende> '<' '/' 'zm' '>'  '<' 'zm' '>' <Zustand> '<' '/' 'zm' '>'  '<' 'zm' '>' <ATagZustand> <Bezeichner> <ETagZustand> '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' <Bezeichner> <ETagZustand> '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' <Alphan.Zeichen> <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' 'z' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' 'z' <AlphanumerischesZeichen> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' 'z' '0' '<' '/' 'z' '>' '<' '/' 'zm' '>' Wort aus Terminalsymbolen

Übung Kommentieren Sie die Ableitung, indem Sie für jeden Ersetzungs-schritt die benutzte Grammatikregel (Produktion) angeben. <Zustandsmenge>  <ATagZustandsmenge> <Zustaende> <ETagZustandsmenge>  '<' 'zm' '>' <Zustaende> <ETagZustandsmenge>  '<' 'zm' '>' <Zustaende> '<' '/' 'zm' '>'  '<' 'zm' '>' <Zustand> '<' '/' 'zm' '>'  '<' 'zm' '>' <ATagZustand> <Bezeichner> <ETagZustand> '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' <Bezeichner> <ETagZustand> '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' <Alphan.Zeichen> <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' 'z' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' 'z' <AlphanumerischesZeichen> '<' '/' 'z' '>' '<' '/' 'zm' '>'  '<' 'zm' '>' '<' 'z' '>' 'z' '0' '<' '/' 'z' '>' '<' '/' 'zm' '>'

Ein Werkzeug zur Sprachbeschreibung Teil 3 Ein Werkzeug zur Sprachbeschreibung

Spracherkennung mit Werkzeugen Siehe: www.devincook.com/goldparser/

Zwei-Stufen-Beschreibung Oft ist eine zweistufige Beschreibung der Sprache zweckmäßig: Zeichen: <, >, /, a, ..., z, A, ..., Z, 0, ..., 9 Festlegung der korrekten Token (Wörter) Wörter / Token: <zm>, <z>, rotgelb, gruen, ... Festlegung der korrekten Tokenfolgen (Sätze) Sätze / Tokenfolgen: <zm><z>rotgelb</z></zm>, <zm></z>, ...

Sprache der Token Alphabet: Grammatik:  = {<, >, /, a, ..., z, A, ..., Z, 0, ..., 9} Grammatik: <ATagZustand> ::= '<' 'z' '>' <ETagZustand> ::= '<' '/' 'z' '>' <ATagZustandsmenge> ::= '<' 'z' 'm' '>' <ETagZustandsmenge> ::= '<' '/' 'z' 'm' '>' <AlphanumerischesZeichen> ::= 'a' | 'b' | .. | 'A' | 'B' | .. | '0' | .. <Bezeichner> ::= <AlphanumerischesZeichen> | <AlphanumerischesZeichen> <Bezeichner>

Sprache der Tokenfolgen Alphabet:  = {<z>, </z>, <zm>, </zm>, ..., rotgelb, ..., gruen, ...} Grammatik: <Bezeichner> ::= ... | rotgelb | ... | gruen | ... <Zustand> ::= '<z>' <Bezeichner> '</z>' <Zustaende> ::= <Zustand> | <Zustand> <Zustaende> <Zustandsmenge> ::= '<zm>' <Zustaende> '</zm>'

Darstellung einer Grammatik Zwei-stufige Darstellung beim Werkzeug „GOLD Parser Builder“ ! Terminalsymbole ATagZustand = '<' z '>' ETagZustand = '<' '/' z '>' ATagZustandsmenge = '<' z m '>' ETagZustandsmenge = '<' '/' z m '>' Bezeichner = {Alphanumeric}+ ! Produktionen "Start Symbol" = <Zustandsmenge> <Zustand> ::= ATagZustand Bezeichner ETagZustand <Zustaende> ::= <Zustand> <Zustaende> ::= <Zustand> <Zustaende> <Zustandsmenge> ::= ATagZustandsmenge <Zustaende> ETagZustandsmenge Reguläre Ausdrücke Produktionen in BNF

Ableitungsbaum

Zustandsautomat Zur Analyse der Terminalsymbole benutzt das Werkzeug „GOLD Parser Builder“ einen Automaten.

Übung Aufgabe 1 Testen Sie das Werkzeug am Beispiel der Zustandsmengensprache. Aufgabe 2 Erstellen Sie eine vollständige Grammatik zur Automaten-beschreibungssprache mit Hilfe des Werkzeugs.

Exkurs: Verknüpfung von Sprachen X und Y seien Sprachen über dem Alphabet . XY = {xy | xX, yY} ist die Menge aller Worte, die sich ergeben, wenn man an ein beliebiges Wort aus X ein beliebiges Wort aus Y hängt. X0 = {}; X1 = X; X2 = XX; X3 = X2X = XXX; ... X* = X0  X1  X2  X3 … ist die Menge aller Worte, die sich ergeben, wenn man beliebig viele (auch keine) Worte aus X aneinanderhängt. X+ = X1  X2  X3  X4 … ist die Menge aller Worte, die sich ergeben, wenn man beliebig viele Worte, aber mindestens ein Wort, aus X aneinanderhängt. Beispiele: Sei X = {a, b}; Y = {c}. XY = {ac, bc} X0 = {}; X1 = X = {a, b}; X2 = XX = {aa, ab, ba, bb} X* = X0  X1  X2  X3 … = {, a, b, aa, ab, ba, bb, ...} X+ = X1  X2  X3  X4 … = {a, b, aa, ab, ba, bb, ...}

Exkurs: Reguläre Ausdrücke Gebeben sei das Alphabet .  ist ein regulärer Ausdruck, der die leere Menge {} bezeichnet.  ist ein regulärer Ausdruck, der die Menge {} mit dem leeren Wort bezeichnet. Für jedes a   ist a ein regulärer Ausdruck, der die Menge {a} bezeichnet. Sind x und y reguläre Ausdrücke, die die Mengen X und Y bezeichnen, so ist auch - (x+y) ein regulärer Ausdruck, der die Menge XY bezeichnet, - xy ein regulärer Ausdruck, der die Menge XY bezeichnet, - (x)* ein regulärer Ausdruck, der die Menge X* bezeichnet, - (x)+ ein regulärer Ausdruck, der die Menge X+ bezeichnet, Beispiele: Sei  = {a, b, c}. (a+b)* = ({a}{b})0  ({a}{b})1  ({a}{b})2  … = {, a, b, aa, ab, ba, ...} a+b*c = ({a}1  {a}2  {a}3 …) ({b}0  {b}1  {b}2 …)({c}) = {ac, aac, aaac, …, abc, aabc, aaabc, …, abbc, aabbc, aaabbc, …} = {aibjc | i >0; j  0}

Darstellung und Test regulärer Ausdrücke Beispiel 1: ! Regulärer Ausdruck L = a[a|b]*c "Start Symbol" = <S> <S> ::= L a(a+b)*c Beispiel 2: ! Regulärer Ausdruck L = b[a]*|[b]+ "Start Symbol" = <S> <S> ::= L ba*+b+ Beispiel 3: ! Regulärer Ausdruck L = A{Letter}*n "Start Symbol" = <S> <S> ::= L A(a+b+...+Z)*n

Übung Erstellen Sie reguläre Ausdrücke zur Beschreibung folgender Mengen: (a) Die Menge aller Zeichenketten über dem Alphabet {0, 1}, die mit 00 enden. (b) Die Menge aller Zeichenketten über dem Alphabet {a, b}, die mit a beginnen oder mit b enden. (c) Die Menge aller Zeichenketten über dem Alphabet {a, b}, die nach jedem a genau zwei b´s haben. (d) Alle Namen über dem Standardalphabet, die mit A anfangen. (e) Die Menge folgender Klassen: {5a, 5b, 5c, ..., 10a, 10b, 10c}. (f) Die Menge zulässiger Zeitangaben; z. B. 12:00.

Übung Wir betrachten Adressen nach dem http-Protokoll mit folgendem Aufbau: http://www.hostname.subdomain.....domain.topleveldomain Beispiel: http://www.google.de Der Einfachheit halber sollen alle Domainnamen nur aus Buchstaben bestehen. Entwickeln Sie eine Grammatik zur Beschreibung solcher Adressen. Testen Sie die Grammatik.

Übung Im Internet-Standarddokument (Request for Comment) RCF1945 für das HTTP-Protokoll findet man die folgende Grammatik für erlaubte Datum-Uhrzeit-Formate. HTTP-date = rfc1123-date | rfc850-date | asctime-date rfc1123-date = wkday "," SP date1 SP time SP "GMT" rfc850-date = weekday "," SP date2 SP time SP "GMT" asctime-date = wkday SP date3 SP time SP 4DIGIT date1 = 2DIGIT SP month SP 4DIGIT date2 = 2DIGIT "-" month "-" 2DIGIT date3 = month SP ( 2DIGIT | ( SP 1DIGIT )) time = 2DIGIT ":" 2DIGIT ":" 2DIGIT wkday = "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun" weekday = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday" month = "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec" Ergänzen Sie geeignete Grammatikregeln für SP, 1DIGIT, 2DIGIT, 4DIGIT. Erzeugen Sie verschiedene korrekte Datum-Uhrzeit-Angaben.

Spracherkennung mit Automaten Teil 4 Spracherkennung mit Automaten

Zielsetzung Ziel ist es, Spracherkennungssysteme zu entwickeln. Ein Spracherkennungssystem soll bei Eingabe eines beliebigen Wortes entscheiden, ob dieses Wort zur vorgegebenen Sprache gehört oder nicht. Wort ja / nein

Vereinfachte Bezeichner Beispiel: Das System soll vereinfachte Bezeichner erkennen: Regeln zur Bildung vereinfachter Bezeichner /1/ Der Bezeichner beginnt mit einem z. /2/ Danach kommt beliebig oft, aber mindestens einmal eine der Ziffern 0 oder 1. Beispiele für korrekte vereinfachte Bezeichner: z0, z10, z01101, z000000 Beispiele für nicht-korrekte vereinfachte Bezeichner: 0z, z10z, z01a, z

Erzeugende Systeme Spracherkennungsansatz: Erzeugung von Ableitungen Alphabet: Erzeugung von Ableitungen:  = {z, 0, 1, a} B  zN  z1 # z1N  z10 # z10N ... Grammatik: B  zN N  0 N  1 N  0N N  1N Erzeuge systematisch Ableitungen mit Hilfe von Grammatikregeln und überprüfe, ob das gegebene Wort auf diese Weise erzeugt werden kann. Wort: z1001

Analysierende Systeme Spracherkennungsansatz: Zustandsbasierte Wortanalyse Verarbeite das Wort mit Hilfe eines erkennenden Automaten: Überprüfe, ob das gegebene Wort den Automaten vom Anfangszustand in einen Endzustand überführt. Endzustand Anfangszustand

Erkennende Automaten Ein erkennender Automat / Akzeptor ist ein Tupel A = (Z, za, Ze, E, ) bestehend aus - einer endlichen Menge Z von Zuständen, - einem Anfangszustand za  Z, - einer Menge Ze  Z von Endzuständen, - einer endlichen Menge E von Eingabezeichen und - einer Überführungsfunktion : Z x E  Z. Zustandsmenge: Z = {Z0, Z1, Z2, Z3} Anfangszustand: za = Z0 Endzustände: Ze = {Z2} Eingabemenge: E = {z, a, 0, 1} Überführungsfunktion: : (Z0, z)  Z1; (Z0, a)  Z3; ...

Die Sprache eines Akzeptors Sei A = (Z, za, Ze, E, A, ) ein Akzeptor. Unter der Sprache L(A) dieses Akzeptors versteht man die Menge aller Wörter über dem Alphabet E, die den Automaten vom Anfangszustand za in einen Endzustand aus Ze überführen. L(A) = {z0, z1, z00, z01, z10, z11, ...}

Übung Ein Akzeptor soll Zustandsbeschreibungen der folgenden Form akzeptieren: <z> <z>AAA <z>AA</z> BB<z> BB<z>BBBAAA B<z>BBABB</z> Bem.: A steht für ein beliebiges alphanumerisches Zeichen; B steht für ein Leerzeichen (blank). Werkzeuge: Automaton Simulator, Charon

Übung Ein Akzeptor soll Zahlen mit folgendem Format akzeptieren: ... Präzisieren Sie zunächst die Grammatik dieser Zahldarstellung. Entwickeln Sie anschließend einen geeigneten Akzeptor. Werkzeuge: GOLD Parser Builder, Automaton Simulator, Charon

Teil 5 Scanner und Parser

Automatenbeschreibungsübersetzer <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> ... </automat> <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high<zustand> </zustandsmenge> ... </automat> Übersetzer <?xml version="1.0"?> <automat name="Klimaanlage"> <zustandsmenge> <zustand>off</zustand> <zustand>low</zustand> <zustand>high</zustand> </zustandsmenge> ... </automat> Fehler

Vereinfachung: Zustandsmengenübersetzer <zm> <z> off </z> <z>low </z> <z> high</z> </zm> <zm> <z> off </z> < z>low </z> <z> high</z> <zm> Übersetzer <zm> <z>off</z> <z>low</z> <z>high</z> </zm> Fehler

Scanner Scanner Erzeugt lexikal. Einheiten (Token) <zm> <z> off </z> <z>low </z> <z> high</z> </zm> <zm> <z> off <z> < z>low </z> <z> high</z> </zm> Erzeugt lexikal. Einheiten (Token) Führt die lexikalische Analyse durch Scanner <zm> <z> off </z> <z> low </z> <z> high </z> </zm> <zm> <z> off <z> !

Parser Parser Erzeugt „Verarbeitungs-programm“ in Normalform <zm> <z> off </z> <z> low </z> <z> high </z> </zm> <zm> <z> off </z> <z> low <z> <z> high </z> </zm> Erzeugt „Verarbeitungs-programm“ in Normalform Führt eine syntaktische Analyse durch Parser <zm> <z>off</z> <z>low</z> <z>high</z> </zm> <zm> <z>off</z> !

Scanner als Akzeptor <zm> <z> off </z> <z>low </z> <z> high</z> </zm> <zm> <z> off </z> <z> low </z> <z> high </z> </zm> Verarbeite jedes Zeichen des Quelltextes. Wenn ein Endzustand verlassen wird, dann mache aus den verarbeiteten Zeichen ein neues Token.

Parser als Akzeptor <zm> <z> off </z> <z> low </z> <z> high </z> </zm> Verarbeite jedes Token der Tokenfolge. Wenn ein Endzustand verlassen wird, dann mache aus den verarbeiteten Token eine neue Verarbeitungseinheit. <zm> <z>off</z> <z>low</z> <z>high</z> </zm>

Auftrag Es sollen Programme entwickelt werden, mit deren Hilfe man Automatenbeschreibungen (vereinfachte Zustandsmengen) scannen bzw. parsen kann.

Scanner-Prototyp Scan-Automat Tokenfolge Quelltext

Klassendiagramm

Scan-Algorithmus begin automat.anfangszustand; Token := ''; for i := 0 to Quelltext.Count-1 do begin zeile := Quelltext[i]; for j := 1 to length(zeile) do begin e := zeile[j]; aZ := automat.getZustand; if automat.endzustand then eZ := true else eZ := false; automat.neuerZustand(e); nZ := automat.getZustand; if (eZ and (nZ <> aZ)) then begin Tokenfolge.Add(Token); Token := ''; end; if e <> ' ' then Token := Token + e; end; end; if automat.endzustand then Tokenfolge.Add(Token); end;

Übung Testen Sie den Scanner. Geben Sie hierzu zunächst den entwickelten Scan-Automaten für Zustandsmengen ein. Testen Sie dann verschiedene korrekte und fehlerhafte Zustandsmengenbeschreibungen.

Parser-Prototyp Parse-Automat Generierter Code Tokenfolge

Klassendiagramm

Parse-Algorithmus begin automat.anfangszustand; Code := ''; for i := 0 to Quelltext.Count-1 do begin Token := Quelltext[i]; aZ := automat.getZustand; if automat.endzustand then eZ := true else eZ := false; automat.neuerZustand(Token); nZ := automat.getZustand; if (eZ and (nZ <> aZ)) then begin Tokenfolge.Add(Code); Code := ''; end; Code := Code + Token; end; if automat.endzustand then Tokenfolge.Add(Token); end;

Übung Testen Sie den Parser. Geben Sie hierzu zunächst den entwickelten Parse-Automaten für Zustandsmengen ein. Testen Sie dann verschiedene korrekte und fehlerhafte Zustandsmengenbeschreibungen.

Literaturhinweise Gasper / Leiß / Spengler / Stimm: Technische und theoretische Informatik. Bsv 1992. Jürgen Müller: XML. Teil 1 - 4. LOG IN 5-6 (2001), Nr. 120 (2002), Nr. 121 (2002), Nr. 122/123 (2002). Selfhtml von Stefan Münz: http://selfhtml.teamone.de/xml/ Linksammlung von Klaus Merkert: http://hsg.region-kaiserslautern.de/faecher/inf/material/xml/index.php