Freie Formatierung von Quelltext
Motivation Kenntnisse über die Formatierung sind beim Schreiben von Programmen nötig, um zu wissen, wann ein Leerraum nötig oder unzulässig ist oder eine neue Zeile begonnen werden kann und wie Programme durch Einrückung übersichtlicher gestaltet werden können. Ohne diese Kenntnisse können praktisch keine Programme geschrieben werden. Am Anfang dieser Lektion werden auch einige Sonderzeichen vorgestellt, deren Kenntnis für die Programmierung ebenfalls nötig ist.
Freie Formatierung
Wenn Zeilenenden keine besondere Bedeutung im Vergleich mit Leerzeichen haben, so spricht man von „freier Formatierung“, da ein Verfasser dann die Freiheiten der Wahl zwischen Zeilenenden und Leerzeichen hat. Diese freie Formatierung ist bei vielen Programmiersprachen üblich und wird im folgenden behandelt.
Texte einer Programmiersprache liegen oft als Datei vor. Solch eine Datei wird auch als „Quelldatei“ bezeichnet, weil sie die Datenquelle für weitere Verarbeitungsschritte darstellt. Der in dieser Datei enthaltene Text wird dann aus dem gleichen Grund auch „Quelltext“ genannt. Dateien einer Programmiersprache sind meist Textdateien. Es gibt in Textdateien keine „versteckten“ Informationen. Der gesamte Inhalt ist als Folgen von Zeilen mit sichtbaren Schriftzeichen lesbar und kann mit einem Texteditor verändert werden.
Schriftzeichen
Die Namen einiger Schriftzeichen (oft in Anlehnung an DIN 66003 oder andere DIN-Normen).
o Kleines O
O Großes O
0 Null (Ziffer)
l Kleines L
1 Eins (Ziffer)
' Apostroph
_ Grundstrich
" Anführungszeichen
/ Schrägstrich
\ inverser Schrägstrich
( runde Klammer auf
) runde Klammer zu
[ eckige Klammer auf
{ geschweifte Klammer auf
< kleiner als (öffnende spitze Klammer)
# Nummernzeichen
* Stern
@ kommerzielles À
- / Texteingabe
- Geben Sie den folgenden Text in ein Editorfenster ein: »([{<oO01l'/"\#@*« (16 Zeichen).
Wörter
In den meisten Programmiersprachen ist ein Wort eine Zeichenfolge, die mit einem Buchstaben beginnt, dem weitere Buchstaben oder Ziffern direkt folgen können. Oft darf auch der Grundstrich »_« in einem Wort enthalten sein. Seltener sind manchmal auch noch andere Zeichen erlaubt.
- Wörter
Haus
Haus2
Haus_2- Wort (Syntaxdiagramm) ::=
.-------------.
----.--->--| Buchstabe |------.->-.->---------------------.---->
\ '-------------' / / \
; . ; ;
| .-------------. | \ .-------------. /
'->--| Grundstrich |----' .----| Buchstabe |--<-.
'-------------' | '-------------' |
| |
| .-------------. |
.----| Ziffer |--<-.
| '-------------' |
| |
| .-------------. |
'----| Grundstrich |--<-'
'-------------'
Ein Text ist ein Wort, wenn es einen Weg vom Eingang zum Ausgang des Syntaxdiagramms gibt, welcher der Pfeilrichtung folgt und dabei über Bezeichnungen kommt, welche diesen Text beschreiben. Beispielsweise ist »X7« ein Wort, weil es aus einem Buchstaben und einer Ziffer besteht und es im Syntaxdiagramm einen Weg vom Eingang zum Ausgang gibt, der über „Buchstabe“ und „Ziffer“ (aber über keine anderen Beschreibungen) kommt.
Ein Buchstabe ist eines der Zeichen »A«, »B«, »C«, »D«, »E«, »F«, »G«, »H«, »I«, »J«, »K«, »L«, »M«, »N«, »O«, »P«, »Q«, »R«, »S«, »T«, »U«, »V«, »W«, »X«, »Y«, »Z«, »a«, »b«, »c«, »d«, »e«, »f«, »g«, »h«, »i«, »j«, »k«, »l«, »m«, »n«, »o«, »p«, »q«, »r«, »s«, »t«, »u«, »v«, »w«, »x«, »y« oder »z«. Eine Ziffer ist eines der Zeichen »0«, »1«, »2«, »3«, »4«, »5«, »6«, »7«, »8« oder »9«. Der Grundstrich ist das Zeichen »_«.
- / Wörter
- Sind die folgenden sieben Texte jeweils Wörter? »_«, »A«, »a2«, »2A«, »istdieseinwort«, »A_B« und »A\B«.
Wörter in diesem Sinne können aus mehreren Wörtern im Sinne der deutschen oder englischen Sprache bestehen. Die Grenzen zwischen solchen inneren Wörtern werden manchmal durch Grundstriche oder Großschreibung gekennzeichnet.
Kamelstil (camel case ) »secondsSinceYesterday«
Pascal-Stil (Pascal case ) »SecondsSinceYesterday«
(Manchmal wird die Bezeichnung “camel case ” auch als Oberbegriff verwendet, der auch Schreibweisen mit einem Großbuchstaben am Anfang enthält. Aber die hier gegebenen Bezeichnungen sind vermutlich die am weitesten verbreiteten.)
C-Stil »seconds_since_yesterday« oder »secondssinceyesterday«
Makro-Stil »SECONDS_SINCE_YESTERDAY« oder »SECONDSSINCEYESTERDAY«
Manchmal werden verschiedene Stile in einem Programm gemischt, um damit jeweils bestimmte Arten von Wörtern zu kennzeichnen.
Leerraum und Zeilenumbruch
In vielen Sprachen mit „freier Formatierung“ ist es erlaubt, an vielen Stellen in einem Text, an denen ein Leerzeichen stehen kann, auch eine neue Zeile zu beginnen. So kann der Text »Haus Hof« dann auch oft auf zwei Zeilen aufgeteilt werden, ohne daß dies die Bedeutung eines Quelltextes ändert. Diese Regel wird ja auch bei normalem deutschen Text, z.B. in einem Brief, Buch oder einer Zeitung, verwendet: An einem Wortzwischenraum kann eine neue Zeile begonnen werden, ohne daß dies an der Bedeutung des Textes etwas ändert (anders ist es bei Gedichten).
- Schreibung in einer Zeile
Haus Hof
- Aufteilung auf zwei Zeilen
Haus
Hof
Weil man ein Leerzeichen normalerweise nicht immer sicher von zwei aufeinanderfolgenden Leerzeichen unterscheiden kann, wird zwischen einem Leerzeichen und einer Folge von mehreren Leerzeichen oft nicht unterschieden, so daß man also immer auch zwei Leerzeichen an eine Stelle setzen kann, an der ein Leerzeichen steht, ohne daß dies normalerweise an der darzustellenden Information etwas ändert. (Hiervon gibt es Ausnahmen.)
- Ein oder zwei Leerzeichen?
Haus Hof Haus Hof
Ein oder mehrere Leerzeichen oder Zeilentrennungen oder Kombinationen davon sind also gleichwertig und werden als „Leerraum“ bezeichnet.
- Leerraum (Syntaxdiagramm) ::=
.--------------------------------------<-.
/ \
; ;
\ .-------------. /
--------------->----.----->| Leerzeichen |------.->----'------------>
\ '-------------' /
; .
| .-------------. |
'--->| Zeilenende |----'
'-------------'
Es gibt aber auch Kontexte, in denen in einem Text ein Zeilenende oder Leerzeichen wörtlich zu verstehen ist, also für sich selbst steht und nicht nur eine Form von Leerraum darstellt. Für eine spezielle Programmiersprache ist jeweils genau festgelegt, wann solch ein Kontext gegeben ist.
Einrückung
Gemäß der genannten Regeln ändern Leerzeichen am Anfang einer Zeile die Bedeutung eines Quelltexts nicht. Deswegen werden sie oft zur übersichtlichen „Einrückung“ von Zeilen eingesetzt, indem hierarchisch untergeordneten Zeilen mehr Leerraum vorangestellt wird.
Eine Zeile gilt „eingerückt“, wenn sie mit einem Leerzeichen beginnt. Die Anzahl der Leerzeichen am Anfang einer Zeile, geben das Maß (die „Tiefe“) der Einrückung an.
- Einrücken einer Zeile
Links ausgerichtete Zeile
um zwei Positionen eingerückte Zeile
um vier Positionen eingerückte Zeile
Einrückung und Klammern
Häufig wird beim Öffnen eines Klammerpaares, welches sich über mehrere Zeilen erstreckt, bis zum Ende des Klammerpaars eingerückt.
Einrückung in Klammern
0123456789
| |
v v Alpha beta gamma
Delta epsilon { Zeta eta theta iota
Kappa lambda my ny xi
Omikron Pi rho sigma tau } { Ypsilon phi chi psi
Omega alpha beta
Gamma delta epsilon } Zeta eta theta iota
Kappa lambda my ny xi
Die drei in den beiden geschweiften Klammern enthaltenen Zeilen beginnen bei Position 2, die anderen ganz links bei Position 0.
So kann der Anfang und das Ende des eingeklammerten Bereichs auf einen Blick erfaßt werden.
Die Details der Einrückung können von dem obigen Beispiel abweichen, beispielsweise indem manchmal um vier Positionen eingerückt wird oder die geschweiften Klammern manchmal genau untereinander angeordnet werden.
Auch ein deutschen oder englischen Texten, werden untergeordnete Textstellen ja oft eingerückt:
Einrückung in deutschen Texten
Alpha beta gamma
Delta epsilon o Zeta eta theta iota
Kappa lambda my ny xi
Omikron Pi rho sigma tau o Ypsilon phi chi psi
Omega alpha beta
Gamma delta epsilon Zeta eta theta iota
Kappa lambda my ny xi
Lexikalische Einheiten
Wir sehen es als selbstverständlich an, daß in ein Wort kein Leerzeichen eingefügt werden darf.
- Ein Wort mit Binnenleerzeichen ?
- Tis ch
Auch in den meisten Programmiersprachen gilt diese Regel.
Auch in eine Zahl darf normalerweise kein Leerzeichen eingefügt werden.
In manchen Programmiersprachen setzt man bestimmte sogenannte „grammatische Symbole“ aus mehreren Zeichen zusammen, die dann als eine Einheit, wie beispielsweise das grammatische Symbol »/*«, eine besondere Rolle spielen. Solch eine Zeichenfolge, die eigentlich „ein“ Symbol darstellen soll, aber mit mehreren Zeichen geschrieben wird, nennt man eine „lexikalische Einheit“ (engl.: “token ”). Ein lexikalische Einheit entspricht in etwa einem Wort einer natürlichen Sprache. So, wie in Wörter kein Leerzeichen eingefügt werden darf, darf man auch in solche lexikalischen Einheiten kein Leerzeichen einfügen.
Eine lexikalische Einheit ist
- ein Wort,
- eine Zahl,
- ein einzelnes Sonderzeichen (wie »(«, »;« oder »)«)
- oder (selten) bestimmte Kombinationen von Sonderzeichen, wie beispielsweise »/*«, »//« oder »--«.
Trennung lexikalischer Einheiten
Da in vielen Sprachen Wörter auch Ziffern enthalten können, muß ein Wort beispielsweise von einer nachfolgenden Ziffer oder von einem nachfolgenden Buchstaben mit Leerraum getrennt werden, weil die Ziffer bzw. der Buchstabe sonst noch zu dem Wort gezählt werden würde.
- Beendigung des Wortes »Haus«
Haus 2
Haus Hof
Haus Hof
Wenn zwei Teile eines Textes aneinandertreffen, die nach den Regeln der Programmiersprache sowieso auseinandergehalten werden können, wie beispielsweise ein Wort und ein Semikolon, dann kann Leerraum dazwischen eingefügt werden, er muß aber nicht eingefügt werden. Da ein Semikolon (in vielen Programmiersprachen) nicht Bestandteil eines Wortes sein kann, ist es nicht nötig, noch ein Leerzeichen zur Abtrennung einzufügen, wenn ein Semikolon einem Wort folgt.
- Beendigung des Wortes »Haus« (1)
Haus;
Haus ;
Wörter, Zahlen und bestimmte andere Symbole einer formalen Sprache sind lexikalische Einheiten. Zwischen zwei lexikalischen Einheiten muß Leerraum eingefügt werden, wenn dies nötig ist, um ein Wort oder eine Zahl zu beenden (z.B. von einem direkt folgenden Wort oder einer direkt folgenden Zahl zu trennen) oder die beabsichtigte Aufteilung in lexikalische Einheiten klarzustellen. Ansonsten „kann“ zwischen lexikalischen Einheiten Leerraum eingefügt werden.
In dem folgenden Beispiel ist der Leerraum beispielsweise nicht zwingend notwendig, da alle lexikalischen Einheiten auch ohne Leerraum getrennt werden können.
- optionaler Leeraum zwischen lexikalischen Einheiten
(num+12)/*
( num + 12 ) /*- / Lexikalische Einheiten abzählen
- Wie viele lexikalische Einheiten finden sich in dem Text »(num+12)/*«?
In dem folgenden Beispiel ist der Leerraum nach dem Wort »return« notwendig, weil sonst das Wort »return22« entstehen würde und die Zahl »22« nicht mehr als Zahl gelten würde, die dem Wort »return« folgt.
- obligatorischer Leeraum zwischen lexikalischen Einheiten
return 22
- / Lexikalische Einheiten abzählen (1)
- Wie viele lexikalische Einheiten finden sich in dem Text »return22«?
Schlüsselwörter und Namen
Ein Wort in einem Programm ist in der Regel entweder ein Schlüsselwort oder ein Name.
- Die Bedeutung eines Schlüsselwortes wird von der Spezifikation der Programmiersprache festgelegt.
- Die Bedeutung eines Namens wird in einer Bibliothek oder in einem Programm festgelegt.