Layout rules - Einrücken von Gofercode
Next: Ein- und Ausgabe
Up: Gofer-Kurzübersicht
Previous: Kommentare
Gofer benutzt das Einrücken einzelner Programmteile
gegenüber dem Rest des Programms zur Erkennung der
Struktur des Programms (Geltungsbereiche von lokalen
Definitionen (where, let) und Alternativen eines case
Ausdrucks).
Beispiel:
f x y = g ( x + w )
where g u = u + v
where v = u * u
w = 2 + y
Durch das Einrücken der zweiten 'where'-Klausel wird
deutlich, dav eine lokale Variable der Definition
von g ist, während w (genauso weit eingerückt wie die
Definition von g) zu der Definition von f gehört.
Eigentlich erwartet Gofer ein Programm, bei dem die
Struktur durch Klammerung mit '{ ' und '} ' (bei mehreren,
getrennt durch ';') eindeutig wird:
f x y = g ( x + w )
where { g u = u + v
where { v = u * u
}; w = 2 + y
}
Die Eingabe dieser Klammerung ist jedoch nicht nötig, da
sie durch das Einrücken einzelner Programmteile
automatisch eingefügt werden kann. Dabei wird nach
folgenden Regeln (Layout-Rules) verfahren:
- Eine öffnende Klammer ('{ ') wird am Beginn des Programms und
nach jedem der Schlüsselworte where, let oder of
eingefügt.
- Ein Semikolon wird vor jedem Token eingefügt, das
genauso weit eingerückt ist, wie das Token nach der letzten öffnenden
Klammer.
- Eine schlieKlammer wird vor einem Token
eingefügt, das weniger weit eingerückt ist, als das
Token nach der letzten öffnenden Klammer oder wenn ein
'unerwartetes' Token (z.B. ein Schlüsselwort)
auftaucht. Dies läßt es zu, daz.B. folgender Code
korrekt geklammert wird:
let a = fact 12 in a + a
wird übersetzt in
let {a = fact 12} in a + a
('in' ist unerwartetes Token)
Leere Zeilen (mit tabs und blanks) und Kommentare haben
keinen Einfluauf die Layout-Rules. Tabs werden als 8
Zeichen Einrücktiefe betrachtet und das EOF-Token muEinrücktiefe Null besitzen (d.h. hinter der letzten Zeile
des Files, die Text enthält (auch Kommentare) mu(mind.)
ein Return folgen).
Sven Eric Panitz
Mo., 23. Okt. 1995, 12:31:09