Skriptum zum linguistischen Teil des Seminars
Mercury-Prolog ist eine neue Programmiersprache, die seit 1995 an der Universität Melbourne entwickelt wird. Sie ist syntaktisch stark an Prolog angelehnt, unterstützt aber neben Relationen auch Funktionen (und höherstufige Funktionen und Prädikate), ist getypt und wird compiliert statt interpretiert.
Näheres siehe: Mercury-Homepage
Der Hauptgrund, Mercury-Prolog statt SWI-Prolog zu benutzen, ist das Typ- und Modulsystem von Mercury. Es erlaubt (und zwingt) uns, Datentypen und Modulschnittstellen festzulegen.
Das sollte die Programmierung mit mehreren Programmierern und die Fehlersuche unterstützen. Der Compiler gibt ziemlich genaue Hinweise auf Fehlerquellen. Der Preis für diese Hilfe ist, daß der Programmierer ziemlich viele Typ-, Modul-, Modus- und Determinismusdeklarationen schreiben muß.
Ein anderer Grund war, daß man mit Mercury-Prolog immer noch die DCG-Grammatiken hat, die wir zum Parsen und Matchen verwenden wollen. Wir sparen uns damit, einen eigenen Parser zu programmieren.
Unter linux ist das Installieren mit rpm -i mercury-compiler-0.10.1-1.i386.rpm (vgl. man rpm) problemlos. Man muß mindestens ein Verzeichnis <install-prefix> angeben, wohin das System installiert werden soll, z.B. /usr/lib/mercury.
Je nachdem, ob man die Info-Seiten installiert, braucht man auch noch Pfadangaben dafür (glaube ich).
Von den Ergänzungen aus mercury-0.10/mercury-extras-0.10.1 brauchen wir mindestens den Lexer aus mercury-extras-0.10.1/lex.
werden in .html-Version unter <install-prefix>/lib/mercury/html installiert. Man kann sie auch über das Internet unter http://www.cs.mu.oz.au/research/mercury/information/documentation.html einsehen.
(Unter <install-prefix>/doc/.. findet man auch .dvi und .ps Versionen der Dokumentation. Zur Installation der Info-Seiten s.u.)
Im Arbeitsverzeichnis, in dem man seine Programme schreibt, sollte man ein Unterverzeichnis Mercury haben, in das der Mercury-Compiler alle möglichen Hilfsdateien schreiben kann. (Sonst werden diese Hilfsdateien ins Arbeitsverzeichnis geschrieben, und man verliert den Überblick.)
Bemerkung: Schritt 2. schreibt Hilfsdateien <code>.dep, <code>.dv in Mercury/deps und <code>.d in Mercury/ds. Schritt 3. schreibt Fehler in die Hilfsdatei <code>.err, schreibt <code>.o, <code>_init.o in Mercury/os und <code>.c, <code>_init.c in Mercury/cs.
Wenn man die Emacs-Unterstützung installiert, kann man im Menupunkt Tools durch Compile den Aufruf von mmake starten und im Minipuffer die jeweilige Ergänzung <code>.depend oder <code> angeben. (Was man nur bei neuen Compilerzielen explizit eingeben muß.)
; ------------Unterstützung der Programmierung mit Mercury-Prolog-------------- ; ; In welchem Verzeichnis liegt der Prolog-Modus prolog.el: (setq load-path (cons "/usr/local/lib/emacs/site-lisp" load-path)) ; Beim Laden von Dateien mit Suffix .m soll Emacs in den Mercury-Mode ; wechseln: (setq auto-mode-alist (append '(("\\.pl$" . prolog-mode) ("\\.pro$" . prolog-mode) ("\\.m$" . mercury-mode)) auto-mode-alist)) ; Um Syntax-Markierung im Emacs zu bekommen, setze: (add-hook 'prolog-mode-hook 'turn-on-font-lock) ; (autoload 'run-prolog "prolog" "Start a Prolog sub-process." t) (setq prolog-system 'mercury) ; Mercury-Prolog 0.10 (2001) (autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t) (setq prolog-program-name nil) ; Mercury ; Damit von Fehlermeldungen automatisch an die Fehlerstelle im ; Quelltext gesprungen werden kann: (defcustom prolog-use-standard-consult-compile-method-flag t "*Non-nil means use the standard compilation method. Otherwise the new compilation method will be used. The recommended setting for the novice user is non-nil for this variable." :group 'prolog-inferior :type 'boolean)
Damit man das automatisch an die Fehlerstelle springen kann, muss aber die
Fehlerausgabe im Puffer *compilation* erscheinen, nicht in de Datei
<code>.err, wohin sie laut <install-prefix>/lib/mercury/Mmake.rules
umgelenkt wird. Man kann im aktuellen Verzeichnis eine Kopie von
Mmake.rules anlegen, in der man die Umleitung der Fehlermeldungen mit
> $*.err 2>
Stattdessen kann man auch im *compilation*-Fenster den ersten
Aufruf von mmc nehmen und nach Anklicken von Compile... im Minipuffer den
Teil > <code>.err 2>
Am CIS sind die Info-Seiten unter /usr/local/mercury-0.10.1/info,
in der Informatik unter
/soft/IFI/lang/mercury-0.10.1/iX86-unknown-linux/info.
Damit das Info-System sie findet, muß man die Umgebungsvariable(n)
INFOPATH bzw. INFODIR um diese Verzeichnisse erweitern.
Es ist (noch) nicht allein mit mercury-0.11.0 verwendbar, weil der
Reader von 0.11.0 die Pseudodeklarationen :- syncat .[<Cat1>,...,<Catn>]
der Grammatik anders parst als 0.10.1.
1 beseitigt. Ob das reicht, habe ich nicht
versucht.
1 weglassen. Dann werden die Fehler im
*compilation*-Puffer erscheinen und Compile/Next error funktioniert.
Nach Programmkorrekturen kann man mit Recompile diesen Aufruf
wiederholen.
6 Kursunterlagen mit Aufgaben
File translated from TEX by TTH, version 2.54.
On 8 May 2003, 13:41.