2009-11-04 9 views

Antwort

8

Aufbau eines ausgewachsenen Parser für COBOL Copybooks hat einige Herausforderungen:

Copybooks in COBOL-Programme während der Textmanipulation Phase der Zusammenstellung einbezogen werden. Die Kopierbuchquelle selbst kann unvollständig sein. Die einzige Möglichkeit, eine vollständige Quelle für das Parsing zu erhalten, besteht darin, sie so vorzubehandeln, als wäre sie in ein COBOL-Souce-Programm gebracht worden. Normalerweise werden Copybooks über die COPY-Direktive in ein COBOL-Programm eingebunden. Es mag ein bisschen sinnlos erscheinen, dies zu tun, aber bedenken Sie folgendes:

1) Die COPY-Direktive wird mit einer ERSETZEN-Option geliefert. An der Oberfläche scheint dies einfach genug zu sein, aber sobald man sich in die Details vertieft, wird es sehr "interessant". Siehe: COPY DIRECTIVE

2) Die REPLACE-Direktive. Diese Direktive kann Quelltext auch manipulieren, nachdem die COPY-Direktive ihren Teil getan hat. Siehe: REPLACE DIRECTIVE

3) Verschachtelte Copybooks. Dieser ist vielleicht nicht so böse wie die vorherigen zwei, aber denkt auch weiter daran.

4) Die Syntax von COBOL Picture strings ist zu lachen. Sehen Sie sich an: Picture String Symbols

5) Ihr Parser muss auch mit COBOL Fortsetzungsregeln umgehen. Siehe: Continuation Lines, und insbesondere die Fortsetzung von PSEUDO TEXT.

Ich möchte Sie nicht entmutigen, aber COBOL zu analysieren ist keine triviale Aufgabe.

Auf der hellen Seite, wenn Ihre Copybooks eine drop-dead-einfache Struktur haben, wie viele tun, ist es möglich, dies mithilfe einer Kaskade von regulären Ausdrücken zu tun. Dieser Ansatz ist ziemlich häufig bei denjenigen, die COBOL-Programme (und Copybooks) bei Software-Renovierungsprojekten analysieren müssen. Vielleicht haben Sie einen Blick auf: RegReg

Prost ...

+0

Was Sie brauchen, ist eine vollständige COBOL-Parser-Front-End, um dies richtig zu machen. Siehe http://www.semanticdesigns.com/Products/FrontEnds/COBOLFrontEnd.html –

2

Vor langer Zeit habe ich etwas Code zum Parsen von COBOL-Copybook und zum Erzeugen von XSD-Dateien erstellt.

Da die COBOL-Sprachstruktur ziemlich regelmäßig ist, erstellte ich einen regulären Ausdruck, um Variablennamen zu erhalten und Feldlängen zu identifizieren. Mit dieser geparsten Struktur konnte ich auch XML-Testdaten, MSXML-DOM-Code zum Manipulieren dieser Struktur und HTML-Formulare zum Testen dieser IMS-Transaktionen erstellen.

Fazit: Reguläre Ausdrücke könnten wirklich nützlich sein, das zu tun.

+0

danke für den Regex-Hinweis – lemotdit

0

Rational Developer für Z, XML Thunder ETL Syncsort ... es gibt viele Produkte, die dies tun wird.

Wirklich, wenn Sie die Regeln der Schemadatentypen erlernen, können Sie es sehr leicht manuell tun. Meistens werden Sie sich mit xsd: string, xsd: decimal, xsd: integer und einigen Varianten von xsd: date beschäftigen, um zu Ihrem Cobol Copybook zu passen.

1

Sie könnten versuchen, meine Koopa Cobol parser Projekt. Während es keine Vorverarbeitung tut, fand ich heraus, dass dies für die meisten Copybooks nicht wirklich notwendig ist. Es sollte das meiste abdecken, was Sie von einem Standard-Copybook erwarten würden, und wenn nicht, können Sie den Parser immer erweitern. Es kann den Syntaxbaum in XML exportieren, den Sie dann beliebig verarbeiten können.

0

Dann gibt es die REDEFINES Klausel, die verwendet wird, um eine bestimmte Menge zusammenhängender Bytes auf unterschiedliche Weise neu zu definieren. Dann die OCCURS Klausel, die eine Implementierung fester Länge von Arrays und OCCURS DEPENDING ON Klausel für Arrays variabler Länge ist.

Also hat NealB recht; das ist nicht eine triviale Aufgabe.