Sämtliche Datendeklarationen werden nach der hier aufgeführten Syntax erkannt. Zusätzlich werden die deklarierten Datenelemente statisch nach verschiedenen Gesichtspunkten analysiert, um die Code-Generatoren bei ihrer Arbeit zu unterstützen.
Die Datendeklarationen werden auf Verwendung geprüft. Dabei wird festgestellt, ob das Datenfeld von irgendeiner Anweisung in irgendeiner Form verwendet wird. Ein Feld wird verwendet, wenn
Für alle in der DATA DIVISION erkannten Datendeklarationen gilt, dass bei der Generierung des Migrationscodes nur solche Deklarationen berücksichtigt werden, die auch tatsächlich im konkreten COBOL Code verwendet werden. Die deklarierten aber nicht-verwendeten Datenfelder werden somit ignoriert.
Ein Feld wird referenziert, wenn
Bei der Generierung können für Anweisungen, die Änderungen an Felder bedeuten, welche Felder jedoch nicht referenziert werden, unterdrückt werden.
Ein Feld wird als direkt änderbar betrachtet, wenn das Feld in irgendeiner Anweisung modifiziert wird.
Ein Feld wird als indirekt änderbar betrachtet, wenn
Ein Feld wird als änderbar durch Initialisierung betrachtet, wenn
Die Datendeklarationen werden auf Strukturrelevanz geprüft. Diese Prüfung stellt fest, ob das Datenfeld einen Beitrag oder eine Abhängigkeit zu oder von einer übergeordneten oder anderen Speicherstruktur darstellt. Ein Feld ist strukturrelevant, wenn
Strukturrelevante Felder können nicht durch einfache Deklarationen im zu generierenden Code umgesetzt werden. Sie müssen mit zusätzlichem Aufwand behandelt werden, da Abfragen oder Änderungen Auswirkungen auf andere Felder haben können.
Eine Datendeklaration kann eine Strukturwurzel bilden. Solche Elemente sind der Einstieg in eine komplexeren Struktur mit gegenseitig voneinander abhängigen Feldinhalten. Ein Feld ist eine Strukturwurzel, wenn
Die Datendeklaration werden auf potentielle Konstanz geprüft. Ein potentiell konstantes Feld kann als compile-time Konstante im migrierten Code erzeugt werden. Ein Feld kommt für eine solche konstante Deklaration in Betracht, wenn
Ein potentiell konstantes Feld wird nur dann als Konstante erzeugt, wenn das Feld nicht strukturrelevant ist.
Die Datendeklarationen werden auf ihre Eignung als lokale Variable geprüft. Ein Feld kann als lokale Variable innerhalb der Bausteinimplementierungsklasse erzeugt werden, wenn
Die Datendeklarationen werden auf der Eignung als Datumsfelder geprüft. Ein Feld kann mit dem Datentyp für Datums- oder Uhrzeitangaben erzeugt werden, wenn
Die Prüfung findet somit also größtenteils im AddIn statt, da die Erkennung für die Eignung als Datumsfeld größtenteils eine Sache der Namensgebungskonventionen in Kombination mit den Datenformaten ist.
Die Datendeklarationen werden auf potentiell anonyme Felder geprüft. Ein potentiell anonymes Feld braucht keinen wirklichen referenzierbaren Namen. Ein Feld ist potentiell anonym, wenn
Potentiell anonyme Felder werden mit dem Prefix Filler
und einer eindeutigen Nummer erzeugt, wenn diese strukturrelevant sein sollten.
Eine Datendeklaration wird als Kandidat für die Umsetzung in eine enumerativen Variable betrachtet, wenn
Der Name für den Typ der enumerativen Variablen wird gebildet aus dem Feldnamen, gefolgt durch Enum
. Diese Namensgebung kann durch ein ggf. installiertes AddIn beeinflusst werden. Der Standardwert für die Variable ist die Domänenangabe, bei der einer der definierten Werte dem Standardwert für den Datentyp des ursprünglichen Feldtypes entspricht, bspw. SPACE
oder ZERO
.
Ein Feld wird als Kandidat für eine bitweise Variable betrachtet, wenn
Man beachte, dass bei dieser Prüfung nur die tatsächlich verwendeten Domänen Beachtung finden, nicht alle definierten.
Eine Datendeklaration wird als Kandidat für die Umsetzung in eine booleschen Variable betrachtet, wenn
Der Name für die boolesche Variable wird abgeleitet aus der Domäne, die als true
-Wert gelten soll. Der true
-Werte der Domäne wird angenommen für die Domäne, die einen der folgenden Werte hat: 1, y, Y, J
oder j
. Wenn keine der Domänen einen solchen Wert hat, wird die Domäne als true
-Wert genommen, die am häufigsten im Code verwendet wird.
Der Initialwert einer Variablen wird aus der VALUE-Angabe der Deklaration abgeleitet. Bei Konstanten jedoch kann der Initialwert für die Konstante abgeleitet sein aus einer Konkatenierung der untergeordneten Elementen oder aus dem Wert einer Redefinition oder übergeordneten Gruppe, und damit einen dementsprechenden Ausschnitt aus dem Initialwert gleichen.
Manche Datenfelder können in Wirklichkeit eine symbolische Konstante sein. Ein ggf. installiertes AddIn kann Einfluss darauf nehmen, welche Variablen in Wirklichkeit für welche Datenfelder welchen Wert darstellen sollen.
Manche Datenfelder können in Wirklichkeit den Wert einer anderen Laufzeitvariable darstellen. Ein ggf. installiertes AddIn kann Einfluss darauf nehmen, welche Variablen in Wirklichkeit mit welchen Laufzeitdaten verbunden werden sollen.
Die Picture Klausel wird auf Sonderzeichen geprüft, um daraus ggf. Formatanweisungen erstellen zu können.
Die Deklaration wird als Wörterbuch(Dictionary) erzeugt, wen es nur eine Sortierungsangabe und zwar Aufsteigend hat.1)
Alle Datenelemente des Objektes können direkt auf erster Ebene angesprochen werden, auch wenn diese unter einer Gruppenstufe definiert wurden. Ebenso können auch die Gruppenstufen direkt angesprochen werden. Wenn eine Gruppenstufe einen als Zeichenfolge darstellbaren Inhalt besitzt, kann diese auch insgesamt abgefragt, nicht jedoch verändert werden. Die Darstellung der Gruppenstufe passiert explizit über die ToString
Methode.
// explizite Nutzung von ToString um den Inhalt der Gruppenstufe darzustellen var WKdubAdrAufbereit = TPruef64.ToString();
Die Datenelemente einer Gruppenstufe können auch unterhalb der Gruppe referenziert werden. So wird in den nachfolgenden Codezeilen immer das gleiche Feld angesprochen:
var monat = this.WKdubNatGebD0.WKdubNatGebMm; var monat = this.WKdubNatGebMm;
Wenn Datenelemente mit gleichem Namen in mehreren Gruppenstufen vorkommen, sind solche Felder, um Namenskonflikte zu vermeiden, teilweise in den übergeordneten Gruppen nicht verfügbar.