© Liashko/Shutterstock.com
Wissenswertes über einen Programmiersprachenurahn

Die Sprache der Buchhalter


Laut bösen Zungen entstand COBOL – die Bezeichnung steht für Common Business-Oriented Language – im Rahmen der wachsenden Verbreitung von Mikrocomputersystemen. Unternehmen suchten händeringend nach Programmierern, die in viel zu geringer Menge zur Verfügung standen.

Die US-Regierung begegnete dem Problem durch die Entwicklung einer neuen Programmiersprache, die ob ihres einfachen Aufbaus auch für Nichttechniker geeignet sein sollte. Im Laufe der Jahre erreichte COBOL so eine immense Verbreitung im Bereich Banken und Versicherungen. COBOL wurde mehrfach überarbeitet. Neben COBOL 72 und COBOL 85 gibt es mit dem 2002 erschienenen Object-Oriented COBOL sogar eine objektorientierte Variante der Sprache. Da sie nur vergleichsweise wenig Verbreitung erreicht hat, wollen wir sie in diesem Artikel nicht weiter behandeln.

Für Entwickler ist COBOL nicht nur aus historischen Gründen interessant. Die im Laufe der Jahre erstellten Systeme laufen nach wie vor, benötigen aber immer wieder Anpassungen. Da Universitäten und höhere technische Lehranstalten schon lange keine neuen COBOL-Programmierer mehr trainieren, steht einem mehr oder weniger konstant großen Markt eine immer kleinere Menge von Lieferanten zur Verfügung.

Diese Situation führt zu den aus dem Wirtschaftslehrbuch bekannten Phänomenen. Dem Autor ist eine Handelsschulabsolventin bekannt, die ihre Einnahmen durch Anbieten von COBOL-Konsultationsdienstleistungen in astronomische Höhen katapultieren konnte. Ob der kleinen Größe des Gesamtmarkts kommunizieren Auftraggeber zudem untereinander: Wer bei einer Wartung erfolgreich mitgewirkt hat, zieht Folgeaufträge geradezu magnetisch an.

COBOL herbei

Für die folgenden Schritte wollen wir uns auf eine unter Ubuntu verfügbare, quelloffene Implementierung der Programmiersprache COBOL beschränken. Sie lässt sich durch Eingabe des folgenden Befehls auf Ihre Maschine herunterladen:

tamhan@tamhan-elitebook:~$ sudo apt-get install open-cobol [sudo] password for tamhan: . . .

Im nächsten Schritt folgt die Erstellung eines Hello-World-Programms. COBOL-Code liegt normalerweise in Dateien mit der Endung .cbl – es gibt auch Unternehmen, die stattdessen auf die generische Dateiendung .src setzen. Den Inhalt von HelloWorld.cbl zeigt Listing 1.

Listing 1

IDENTIFICATION DIVISION. PROGRAM-ID. HELLOSUS. PROCEDURE DIVISION. DISPLAY 'Nichts wie los!'. STOP RUN.

Wer eine .cbl-Datei mit dem auf den meisten Unix-Systemen vorinstallierten gedit öffnet, wird vom Editor mit grundlegendem Syntax-Highlighting versorgt. Der genaue Code ist für uns erst im nächsten Abschnitt relevant – im Moment genügt die Eingabe der folgenden Kommandos, die die Programmausführung anwerfen:

tamhan@tamhan-elitebook:~/SUSCobol$ cobc -free -x -o helloworldexe helloworld.cbl tamhan@tamhan-elitebook:~/SUSCobol$ ./helloworldexe Nichts wie los! 

Sprechen Sie Lochkarte?

COBOL-Programme residieren oft auf Lochkarten. Da die Entwicklung von Parsern zum damaligen Zeitpunkt nur wenig fortgeschritten war, führte die Sprachspezifikation eine Gruppe von Syntaxregeln zur Vereinfachung der Analyse ein. Die bis COBOL 2002 verpflichtende Formatierungskonvention schrieb eine bestimmte Menge von Leerzeichen vor, die die einzelnen Module voneinander abtrennen. Der Autor eines Parsers konnte so durch Zählung der Leerzeichen Rückschlüsse über die Art des vorliegenden Kommandos ziehen.

Da heutige Parser mit beliebig komplexen Grammatiken zurechtkommen, ist die Nutzung der beschreibenden Leerzeichen heute nicht mehr notwendig. Im durch Übergabe von -free aktivierbaren Free Mode parst der Compiler „frei Schnauze“. Weitaus wichtiger ist die in Abbildung 1 gezeigte Programmstruktur, die sich in unserem Beispielcode – wenn auch nur teilweise – abgebildet wiederfindet.

hanna_cobol_1.tif_fmt1.jpgAbb. 1: COBOL ist vergleichsweise komplex aufgebaut

Divisionen stellen den obersten Teil der COBOL-Ontologie dar. Im als „identification division“ bezeichneten Block finden sich Informationen über die Art des vorliegenden Programms. Der abzuarbeitende Code liegt in der „procedure division“. Variablen werden in der „data division“ deklariert, die „environment division“ enthält weitere Informationen über die vom Programm verwendeten Eingabe- und Ausgabedateien.

Die darunterliegenden Sections und Paragraphs erlauben die weitere Unterteilung des vorliegenden Codes. Sentences, Statements und Characters finden sich nur in der „procedure division“. Ein Sentence ist eine Kombination von mehreren Kommandos, die – Ähnlichkeiten zur englischen Sprache sind rein zufällig – durch einen Punkt abgeschlossen werden müssen.

Etwas zusätzliche Logik

Als nächste Aufgabe wollen wir uns der Realisierung des FizzBuzz-Tests zuwenden. Das in angelsächsischen Kreisen als Fingerübung für angehende Programmierer weit verbreitete Programmbeispiel bietet uns einige Möglichkeiten zum Experimentieren. Akt Numero 1 ist die Realisierung einer For-Schleife. Dazu erstellen wir eine neue Datei namens fizzbuzz.cbl, deren Grundaufbau Listing 2 darstellt.

Listing 2

IDENTIFICATION DIVISION. PROGRAM-ID. FIZZBUZZ. DATA DIVISION. WORKING-STORAGE SECTION. 01 COUNTVAR PIC 999 VALUE 0. PROCEDURE DIVISION. PERFORM COUNTRUN 25 TIMES. STOP RUN. COUNTRUN. DISPLAY COUNTVAR. ADD 1 TO COUNTVAR.

An dieser Stelle finden sich drei signifikante Änderungen. Als Erstes haben wir eine neue Division eingeführt: In der DATA DIVISION werden die vom Programm benötigten Variablen angelegt. Als Entgegenkommen an nicht IT-affine Personen kennt COBOL keine klassischen Datentypen – die Variablen werden stattdessen mit einem als Data Picture bezeichneten Attribut versehen, das die Art der zu speichernden Informationen und die Art der gewünschten Darstellung am Bildschirm zusammenfasst. Mit dem optionalen Value-Attribut lässt sich die Erstinitialisierung problemlos bewerkstelligen.

In der „procedure division“ finden wir das COBOL-Äquivalent zur For-Schleife. PERFORM X Y TIMES führt die als X übergebene „Division“ Y-mal aus. In unserem Fall wird das „Unterprogramm“ COUNTRUN 25 Mal abgearbeitet. Nach der durch COUNTRUN. beginnenden Deklaration findet sich der eigentliche Code, der den aktuellen Inhalt von COUNTVAR inkrementiert und ausgibt. Damit können wir COUNTRUN um die eigentliche FizzBuzz-Logik erweitern, die aus einer Gruppe von Selektionen besteht. Ersetzen Sie den Korpus durch das Snippet in Listing 3.

Listing 3

COUNTRUN. IF COUNTTHREE = 3 THEN IF COUNTFIVE = 5 THEN DISPLAY "FizzBuzz" COMPUTE COUNTFIVE = 0 ELSE DISPLAY "Fizz" END-IF COMPUTE ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang