Prolog Grundkurs WS 99/00 Christof Rumpf

Slides:



Advertisements
Ähnliche Präsentationen
Deduktive Datenbanken
Advertisements

Vorlesung Compilertechnik Sommersemester 2008
6. Regelbasierte Systeme
Semantik und Wissensrepräsentation
Frame-Logik Eine Einführung Andreas Glausch.
2. Programmstruktur – Teil 2
8. Formale Sprachen und Grammatiken
Grammatiken, Definitionen
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Grammatiken beschreiben Sprachen L µ *, indem.
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Reduktionen Def: L · L (L ist reduzierbar auf.
Christian Schindelhauer
Kapitel 4 Syntaktische Analyse: LR Parsing.
Listen & Beweisstrategie
Rekursive Listenverarbeitung
Cut, Negation, Manipulation der Datenbasis
Maschinelle Übersetzung I
Prolog und Prädikatenlogik I
Parser generieren Yet Another Compiler – Compiler YACC.
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Sortierverfahren Richard Göbel.
Formale Sprachen – Mächtigkeit von Maschinenmodellen
Dateihandles Um in Perl eine bestimmte Datei zum Lesen, Schreiben oder Anhängen zu öffnen, benötigt man so genannte Dateihandles. Ein Dateihandle ist der.
Übung 6.1Turing-Maschine 1.Machen Sie sich mit der Funktionsweise des Busy Beaver-Programms vertraut Vollziehen sie die 11 Schritte der ersten Turing-Tabelle.
Semantik von Prolog & Unifikation
Verschachtelte Listen, Differenzlisten, Graphen
Syntax von Prolog & Familiendatenbasis
Fakten, Regeln und Anfragen
Prolog Grundkurs WS 98/99 Christof Rumpf
Tokenizer Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
PATR II Interpreter Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Parsing regulärer Ausdrücke
Flaches Parsing mit endlichen Automaten Referat und Implementierung Jutta Jäger
Sprachwissenschaftliches Institut Einführung in die HPSG Grammatiktheorie 4./11. Mai 2004.
XDoclet ETIS SS05.
Grammatik als Deduktionssystem
Lexikalisch-Funktionale-Grammatik
Einführung in Berechenbarkeit, Formale Sprachen und Komplexitätstheorie Wintersemester 2005/ Vorlesung Dominic Dumrauf.
Christian Schindelhauer
Günter Kniesel Advanced Prolog. 2 Bisher: Grundlagen Klauseln –Regeln –Fakten Terme –Die einzige Datenstruktur in Prolog –Listen als Sonderfall mit eigener.
Von der Sprache zum Programm
Semantik und Pragmatik Übung 4 Fragment 2 Skopusambiguitäten Frank Schilder.
NANI SEARCH "THE ULTIMATE HELP FOR DESPERATE KIDS"... ODER EINE KNACKNUSS FÜR PROLOG ANFÄNGER.
Effiziente Algorithmen
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
Anfang Präsentation 20. Oktober, 2004 Elektrische Schaltungen I Diese Vorlesung diskutiert die mathematische Modellierung einfacher elektrischer linearer.
Formale Sprachen Grammatiken und die Chomsky-Hierarchie
Entwurf und Implementierung eines Scanner-Generatorsystems
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 1: Wiederholung (Vor allem Folien von Priv.-Doz. Dr. Kindler vom WS 2001/02.
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
Noam CHOMSKY, Sheila GREIBACH
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 3: Potenzreihen und kontextfreie Sprachen (Vgl. Buch von A. Salomaa)
TDD mit MSTest Stefan Lieser
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Arne Vater Wintersemester 2006/07 28.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Arne Vater Wintersemester 2006/ Vorlesung
Informatik III Christian Schindelhauer Wintersemester 2006/07
Integritätserhaltung und -Überprüfung in deduktiven Datenbanken
11. Wissenbasis und Regelsysteme Sebastian Linek.
Agenda Motivation und Einordnung Syntaxgerichtete Übersetzung
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
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
Kapitel 4:Die Chomsky Hierarchie
Lexikalisch-Funktionale-Grammatik  Formaler Aufbau der F-Strukturen  Funktionale Beschreibungen  Funktionale Annotationen  Von der K-Struktur zur F-Struktur.
Prolog Grundkurs WS 99/00 Christof Rumpf
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Dr. Wolfram Amme, Automatische Speicherverwaltung, Informatik II, FSU Jena, SS Automatische Speicherverwaltung.
 Präsentation transkript:

Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de Parametrisierte DCGs Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de

Kontextfreie Sprachen DCGs ohne Parameter entsprechen den kontextfreien Grammtiken der Chomsky-Hierarchie. Die folgende DCG erkennt die kontextfreie Sprache anbn , n  0 : s --> []. s --> [a], s, [b]. 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Reguläre Sprachen Durch Beschränkung der Regeln auf die Form VN × VT VN  VN × VT kann man mit DCGs reguläre Grammatiken schreiben. Die folgende DCG erkennt die reguläre Sprache a*b*: s --> []. s --> [a], s. s --> [b], b. b --> []. b --> [b], b. 20.12.99 GK Prolog - Parametrisierte DCGs

Kontextsensitive Sprachen Parametrisierte DCGs sind in der Lage, kontext-sensitive Sprachen zu erkennen. Die folgende DCG erkennt die kontextsensitive Sprache anbncn, n  0: s --> a(I), b(I), c(I). a(i) --> []. a(i(I)) --> [a], a(I). b(i) --> []. b(i(I)) --> [b], b(I). c(i) --> []. c(i(I)) --> [c], c(I). 20.12.99 GK Prolog - Parametrisierte DCGs

Rekursiv aufzählbare Sprachen Mit parametrisierten DCGs können selbst rekursiv aufzählbare Sprachen erkannt werden. Zum Beweis implementiere man eine allgemeine Turing-Maschine mit einer DCG. Repräsentiere Zustände als Konstituenten Band als Listen-Parameter 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Schweitzerdeutsch Das Schweizerdeutsche zeigt sogenannte kreuzserielle Abhängigkeiten zwischen Verben und NPs, die den kontextfreien Rahmen sprengen. Claudia Helmut Eva Hans Ulrike watched let help make work. NP1 NP2 NP3 NP4 NP5 V1 V2 V3 V4 V5 Claudia beobachtete, wie Helmut Eva Hans helfen ließ, Ulrike zum arbeiten zu bringen. Sortiert nach akk/dat-Zuweisung: 20.12.99 GK Prolog - Parametrisierte DCGs

Generierung von Syntaxbäumen Zusätzliche Argumente von DCGs können verwendet werden, um beim Parsen einer Kette den entsprechenden Ableitungsbaum zu erzeugen. ?- s(T,[paul,klaut,bananen],[]). T = s(np(paul),vp(v(klaut),np(bananen))) yes 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Baum als Struktur s(s(NP,VP)) --> np(NP,Num), vp(VP,Num). vp(vp(V,NP),Num) --> v(V,Num), np(NP,_). v(v(klaut), sg) --> [klaut]. v(v(klauen), pl) --> [klauen]. np(np(paul), sg) --> [paul]. np(np(bananen),pl) --> [bananen]. 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Baum als Liste s([s,NP,VP]) --> np(NP,Num), vp(VP,Num). vp([vp,V,NP],Num) --> v(V,Num), np(NP,_). v([v,[klaut]], sg) --> [klaut]. v([v,[klauen]], pl) --> [klauen]. np([np,[paul]], sg) --> [paul]. np([np,[bananen]],pl) --> [bananen]. 20.12.99 GK Prolog - Parametrisierte DCGs

Parsen mit Baum-Ausgabe Eine DCG mit Syntaxbaumgenerierung kann mit einem Pretty-Printer gekoppelt werden, um einen Parser mit Ausgabe zu erhalten. parse(Sentence):- s(Tree,Sentence,[]), pp(Tree). 20.12.99 GK Prolog - Parametrisierte DCGs

Verarbeitung von Testsätzen Zum Testen einer Grammatik wird oft eine Menge von Testsätzen benötigt, die man am besten als Fakten in der Datenbasis ablegt. ex(1,[maria,sieht,den,mann]). ex(2,[maria,sieht,dem,mann]). ex(3,... test(N):- ex(N,S), write(S), nl, parse(S). 20.12.99 GK Prolog - Parametrisierte DCGs

Testen von Teilphrasen Eine Grammatik besteht neben dem Lexikon aus einer Menge von Phrasenstrukturregeln. Bei der Grammtikentwicklung ist es oft sinnvoll, die Regeln für Teilphrasen gezielt zu testen, bevor man ganze Sätze parst. Dadurch werden Fehler i.d.R. viel schneller gefunden. ?- pp([mit,dem,teleskop],[]). 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Metavariablen Weder unser parse/1 noch test/1 sind geeignet, um Teilphrasen zu verarbeiten. Lösung: Aufruf der DCG über Metavariablen mit dem eingebauten Prädikat call/1. ex(1,s([maria,sieht,den,mann],[])). ex(2,pp([im,park],[])). ex(3,... test(N):- ex(N,G), write(G), nl, call(G). 20.12.99 GK Prolog - Parametrisierte DCGs

Analyse vs. Generierung Der Aufruf eines Parsers mit einer gegebenen Kette setzt einen Analyseprozeß in Gang. Das Ergebnis der Analyse ist ein Grammatikalitäts-urteil über die Kette bezüglich der Grammatik. Der Aufruf eines Parsers mit einer Variablen bewirkt die Generierung von grammatischen Ketten (bezüglich der Grammatik!). 20.12.99 GK Prolog - Parametrisierte DCGs

Korrektheit und Vollständigkeit Korrektheit und Vollständigkeit von Grammatiken versucht man durch Testen zu ermitteln. Dazu analysiert man eine Menge geeigneter Testsätze, die auch ungrammatische Sätze enthalten sollte, bzw. generiert Sätze und beurteilt deren Grammatikalität. Korrektheit: Es werden nur grammatische Ketten analysiert/generiert. Vollständigkeit: Es werden alle grammatischen Ketten analysiert/generiert. 20.12.99 GK Prolog - Parametrisierte DCGs

Generierung rekursiver Phrasen Rekursive Regeln können beliebig lange Ketten generieren. Beim Testen von Grammatiken auf generative Kapazität bereitet das top-down depth-first-Verfahren des Interpreters Probleme, da die erste Ableitung beliebig oft iteriert wird und Alternativen unberücksichtigt bleiben. Maria sieht den Mann im Park im Park im Park im Park im Park im Park ... 20.12.99 GK Prolog - Parametrisierte DCGs

Beschränkung der Kettenlänge Durch die Bindung einer Kette an eine Liste definiter Länge kann die Generierung redundanter Iterationen vermieden werden. ?- S = [_,_,_,_,_,_,_,_,_], s(S,[]). S=[maria,sieht,den,mann,im,park,mit,dem,teleskop]->; S=[maria,sieht,den,mann,mit,dem,teleskop,im,park]->; S=[maria,mit,dem,teleskop,sieht,den,mann,im,park]->; ... 20.12.99 GK Prolog - Parametrisierte DCGs

Generierung von Listen Die Generierung von Listen definiter Länge kann automatisiert und für einen „Phrasengenerator“ verwendet werden. genlist(0,[]). genlist(N,[_|T]):- N > 0, M is N-1, genlist(M,T). generate(N):- genlist(N,S), parse(S). 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Fail-Loop Mit Hilfe eines Fail-Loops kann ein Generator definiert werden, der alle Phrasen einer festen Länge ohne Benutzerinteraktion generiert und ausgibt. generateall(N):- genlist(N,S), s(S,[]), write(S), nl, fail. generateall(_). 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Zählschleife Mit einer Zählschleife definieren wir einen Generator, der alle Phrasen ausgibt, deren Länge in einem gegebenen Intervall liegt. generateall(Max,Max):- generateall(Max). generateall(N,Max):- N < Max, M is N+1, generateall(N), generateall(M,Max). 20.12.99 GK Prolog - Parametrisierte DCGs

Pretty-Printer für Ketten Unser Generator kann noch etwas attraktiver gestalten werden, indem eine Ausgabe der Ketten ohne Listenklammern und Kommata eingebaut wird. print_phrase([]):- nl. print_phrase([Word|Words]):- tab(1),write(Word), print_phrase(Words). ?- print_phrase([maria,sieht,den,mann]). maria sieht den mann 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs Dateiausgabe Die Ausgabe komplexer Syntaxbäume oder größerer Mengen von generierten Sätzen läßt den Bildschirm des Arity\Prolog-Interpreters als ungeignetes Ausgabemedium erscheinen, da man nicht zurückblättern kann. Auch möchte man manchmal Programm-Ausgaben dauerhaft dokumentieren. Dazu benötigen wir Mittel, um eine Ausgabe in eine Datei umzuleiten. 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs tell/1 und told/0 Das eingebaute Prädikat tell/1 öffnet eine Datei und setzt einen Zeiger auf den Dateianfang. Der Dateiname muß als atomares Argument spezifiziert sein. Das eingebaute Prädikat told/0 schließt die Datei, die als letztes geöffnet wurde. Wird told/0 nach einem Aufruf von tell/1 nicht ausgeführt, stürzt Prolog ab. 20.12.99 GK Prolog - Parametrisierte DCGs

GK Prolog - Parametrisierte DCGs file_output/2 Das Prädikat file_output/2 leitet alle Ausgaben in eine Datei File um, die während der Ableitung eines Aufrufs Goal erfolgen. file_output(File,Goal):- tell(File), (call(Goal) ; true), told. 20.12.99 GK Prolog - Parametrisierte DCGs