2009-11-04 10 views

Odpowiedz

8

Budowanie pełnowartościowy parser dla copybooks COBOL ma kilka wyzwań:

Zeszyty zostały włączone do programów COBOL podczas fazy manipulacji tekst kompilacji. Źródło copybook samo może być niekompletne. Jedynym sposobem uzyskania kompletnego źródła parsowania jest wstępne przetworzenie go tak, jakby został wprowadzony do programu kontekstowego COBOL. Zwykle copybooks są wprowadzane do programu w języku COBOL za pośrednictwem dyrektywy COPY. Poruszanie tego może wydawać się trochę bezcelowe, ale rozważmy następujące:

1) Dyrektywa COPY zawiera opcję WYMIANY. Na pozór może wydawać się to na tyle proste, że można sobie z tym poradzić, ale gdy już wejdzie się w szczegóły, staje się bardzo "interesujące". Zobacz: COPY DIRECTIVE

2) Dyrektywa REPLACE. Ta dyrektywa może również manipulować tekstem źródłowym po tym, jak dyrektywa COPY wykonała swój bit. Zobacz: REPLACE DIRECTIVE

3) Zagnieżdżone zeszyty. Ten nie może być tak nieprzyjemny jak poprzednie dwa, ale także mieć na myśli zagnieżdżanie się.

4) Składnia napisów w języku COBOL ma na celu wywołanie śmiechu. Spójrz na: Picture String Symbols

5) Twój parser również będzie musiał postępować zgodnie z zasadami kontynuacji COBOL. Zobacz: Continuation Lines, a kontynuacja PSEUDO TEXT w szczególności.

Nie chcę was zniechęcać, ale parsowanie COBOL nie jest trywialnym zadaniem.

Po jasnej stronie, jeśli twoje zeszytów ma drop-dead-simple struktury do nich, jak wielu, może to być możliwe, aby to zrobić za pomocą kaskady wyrażeń regularnych. Takie podejście jest dość powszechne wśród tych, którzy muszą analizować programy COBOL (i zeszytów) na temat projektów aktualizacji oprogramowania. Może rzucić okiem na: RegReg

Cheers ...

+0

Potrzebujesz tego pełnego przedniego końca parsera COBOL, aby zrobić to dobrze. Zobacz http://www.semanticdesigns.com/Products/FrontEnds/COBOLFrontEnd.html –

2

Dawno temu skonstruowałem kod do parsowania zeszytu podręcznego w języku COBOL i do generowania plików XSD.

Ponieważ struktura języka w języku COBOL jest dość regularna, stworzyłem wyrażenie regularne, aby uzyskać nazwy zmiennych i określić długości pól. Dzięki tej parsowanej strukturze mogłem również utworzyć dane testowe XML, kod DOM MSXML, aby manipulować tą strukturą i formularzami HTML, aby przetestować te transakcje IMS.

Podsumowanie: Wyrażenia regularne mogą być naprawdę przydatne do tego.

+0

dzięki za podpowiedź regex – lemotdit

0

Rational Developer for oo, XML Thunder, Syncsort ETL ... istnieje wiele produktów, które to zrobić.

Tak naprawdę, jeśli nauczysz się zasad dotyczących typów schematów, możesz to zrobić bardzo łatwo ręcznie. Przeważnie zajmiemy się xsd: string, xsd: decimal, xsd: integer i niektórymi smakami xsd: date pasującymi do twojego zeszytu Cobola.

1

Możesz wypróbować mój projekt Koopa Cobol parser. Mimo że nie wykonuje się wstępnego przetwarzania, okazało się, że w przypadku większości zeszytów nie jest to konieczne. Powinien obejmować większość tego, czego można oczekiwać od standardowego zeszytu, a jeśli nie, zawsze możesz rozszerzyć analizator składni. Może wyeksportować drzewo składniowe do XML, które można następnie przetwarzać w dowolny sposób.

0

Następnie znajduje się klauzula REDEFINES, która służy do redefiniowania danego zestawu sąsiednich bajtów na różne sposoby. Następnie klauzula OCCURS, która jest implementacją stałej długości tablic i klauzuli OCCURS DEPENDING ON dla tablic o zmiennej długości.

A więc NealB ma rację; to jest niezbyt proste zadanie.