Bedienung des SML-Systems auf den Rechnern des CIS
WS 2000/2001

H.Leiß

1  Aufrufen und Beenden von SML

1.1  Aufruf von Standard ML in einer Shell

[Pfadname] sml       (genauer: /usr/local/bin/sml)

Nach kurzer Zeit erscheint dann:

Standard ML of New Jersey, Version 110.0.3, January 30, 1998 [CM;autoload enabled]
-

Man sollte /usr/local/bin im Suchpfad haben, sonst reicht der Aufruf mit sml nicht, und die folgenden Aufrufe über Emacs funktionieren dann auch nicht!

1.2  Emacs-Anpassung für die Unterstützung von SML

Ich empfehle, SML im Emacs-Editor zu benutzen. Die wichtigsten Emacs-Befehle sind auf den zwei Seiten der

GNU Emacs Reference Card

zusammengefaßt, die man sich (doppelseitig: mit lpr -Plp) ausdrucken kann. Unter dem Menü Help findet man im Emacs auch ein Tutorium zur Bedienung, wo die Befehle genauer erklärt werden. Es lohnt sich, das frühzeitig zu lernen.

Damit die Im Folgenden beschriebenen Emacs-Funktionen wirklich ausführbar sind, muß man in seine ~/.emacs-Datei die Zeilen

(setq load-path (cons "/usr/local/lib/emacs/site-lisp/sml-mode-3.1" load-path)) (load-library "/usr/local/lib/emacs/site-lisp/sml-mode-3.1/sml-init.el")

einfügen. Die am CIS vorgenommenen Menü-Änderungen und die Anbindung entsprechender Systemaufrufe sind dort definiert. (Sie funktionieren bei einer anderen Installation also i.a. nicht oder anders.)

Aufruf von Standard ML im Emacs durch Befehle

Im Editor Emacs startet man (nach der oben beschriebenen Änderung von ~/.emacs) SML (am CIS) durch

M-x sml     (Escape-Taste; x-Taste; sml; Return-Taste),

bei anderen Installationen (ggf. im XEmacs, zu Hause?) durch

M-x run-sml.

Dadurch wird ein SML als Subprozeß des Emacs gestartet, der in einem eigenen Emacs-Puffer namens *sml* erscheint. Dieser Puffer läuft zunächst im Hintergrund; man kann ihn in den Vordergrund holen, indem man entweder

M-x switch-to-sml

eingibt oder den Buffer *sml* unter dem Menüpnkt Buffers des Emacs anklickt.

Aufruf von Standard ML im Emacs über die Menüs

Eine andere Möglichkeit, SML im Emacs zu starten, geht über die Menüleiste: Nachdem man eine Datei mit Suffix .sml (oder .sig oder .cm) in den Emacs geladen hat, erscheint auf der Menüleiste ein Punkt

SML.

Dort wählt man

Process > run Standard ML of New Jersey 110,

wodurch ebenfalls ein Subprozeß in einem Hintergrundpuffer namens *sml* gestartet wird.

2  Unterbrechen und Abbrechen von SML

Durch Eingabe von

Ctrl C     (Control- und C-Taste simultan)

unterbricht man die Auswertung, und durch Eingabe von

Ctrl D

bricht man einen laufenden SML-Prozess ganz ab.

3  Eingabeaufforderung, Zeilenumbruch und Eingabeende

Im SML-Prozeß wird die Eingabeaufforderung an den Benutzer (der Prompt), durch

-

am Zeilenanfang gekennzeichnet; SML wartet dann auf eine Eingabe.

Das Ende der Eingabe muß der Benutzer durch

;        (Semikolon; Return-Taste)

angeben.

Man kann jederzeit durch die Return-Taste eine neue Zeile beginnen, ohne daß SML eine Auswertung der bisherigen Eingaben vornimmt; diese Situation wird durch

am Zeilenanfang gekennzeichnet. (Da (Befehl1; Befehl2) auch zur Sequenzierung von Programmen dient, wird ggf. zuerst auf schließ ende Klammern gewartet, bevor ; als Eingabeende erkannt wird!)

Jede Ausgabe von SML am Bildschirm beginnt direkt am Zeilenanfang (bei früheren Versionen mit am Anfang der Zeile).

4  SML-Modus des Emacs

Der Emacs verfügt über einen speziellen Modus zum Editieren von SML-Programmen und zur leichteren Interaktion zwischen SML-Dateien und dem SML-Prozess.

Am CIS ist nicht die neueste Version des SML-Modus installiert, sondern die etwas ältere Version 3.1. (Die neueste Version 3.9.2 hat ein paar Funktionen abgeschafft, und ich hatte Probleme bei der Installation.)

Am CIS ist der Emacs so voreingestellt, daß alle Dateien, deren Name ein Suffix der Form .sml, .sig, .cm hat, automatisch beim Laden in den Emacs in (einen Puffer mit) SML-Modus gebracht werden. Man kann aber mit

M-x sml-mode

auch jeden anderen Puffer des Emacs in den SML-Modus bringen. Nur wenn der Cursor in einem Puffer im SML-Modus steht, erscheint auf der Menüleiste der Menüpunkt SML.

Was der SML-Modus leistet, findet man unter dem SML-Menüpunkt

Help on Emacs SML mode

oder durch Eingabe von

C-h sml-mode.

Unter dem Submenü Process findet man Menüpunkte

load ML source file zum Laden von Dateien,
send buffer content zum Laden des jeweiligen Puffers (in dem der Cursor steht)
send region ... oder von Teilen dieses Puffers in den laufenden SML-Prozeß,
goto next error zum Springen an die vom SML-Compiler gemeldete Fehlerstelle im Programm,
run Standard ML of NJ zum Starten von SML als Unterprozeß des Emacs,
HTML Basis Library zum Starten der Dokumentation der SML-Bibliothek (am CIS)
HTML Automata Library zum Starten der Dokumentation eines Automatenpackets (am CIS)

Insbesondere das automatische Aufsuchen eines Programmfehlers durch goto next error ist sehr nützlich; es funktioniert auch bei mehreren gleichzeitig bearbeiteten SML-Dateien.

Bem. Beim Aufrufen der Dokumentationen erscheint im Emacs ein Puffer *Async Shell Command*, den ich leider nicht automatisch im Hintergrund halten konnte.

Im Hauptteil des SML-Menüs findet man noch ein paar Punkte, mit denen man Schemata für häufig verwendete Programmkonstrukte automatisch in eine SML-Datei einfügen kann, was die Schreibarbeit etwas erleichtert.

Außerdem kann man z.B. eine automatische Formatierung von Programmteilen durch

M-x indent-region

erhalten, wenn man vorher im Emacs einen Teil der SML-Datei markiert hat. (Für weitere Funktionen siehe Help on Emacs sml-mode.)


File translated from TEX by TTH, version 2.54.
On 24 Oct 2000, 19:14.