2009-11-04 120 views

回答

8

構建用於COBOL習字一個完全成熟的解析器有幾個挑戰:

習字期間編譯的文本操作階段納入COBOL程序。抄寫本源本身可能不完整。獲得完整解析源的唯一方法是對它進行預處理,就好像它已被引入COBOL源程序一樣。通常,抄本通過COPY指令進入COBOL程序。使它看起來有點沒有意義,但考慮以下幾點:

1)COPY指令帶有REPLACING選項。表面上看起來很簡單,但是一旦你瞭解了細節,它就變得非常「有趣」。參見:COPY DIRECTIVE

2)REPLACE指令。這個指令也可以在COPY指令完成之後處理源文本。參見:REPLACE DIRECTIVE

3)嵌套抄本。這一個可能不像前兩個那樣討厭,但也一直牢記在心。

4)COBOL圖片字符串的語法也注意到笑。看看:Picture String Symbols

5)您的解析器也需要處理COBOL延續規則。請參閱:Continuation Lines,特別是PSEUDO TEXT的繼續。

我不想阻止你,但解析COBOL並不是一件容易的事。

在光明的一面,如果您的抄本對他們有一個簡單的結構,就像許多人一樣,可以使用正則表達式級聯來完成。這種方法在那些需要解析軟件翻新項目的COBOL程序(和副本)的人中很常見。也許看看:RegReg

乾杯......

+0

您需要的是一個完整的COBOL解析器前端來完成這項工作。請參閱http://www.semanticdesigns.com/Products/FrontEnds/COBOLFrontEnd.html – 2010-01-29 05:20:57

2

很久以前,我構建了一些代碼來解析COBOL copybook並生成XSD文件。

由於COBOL語言結構非常規則,我製作了一個正則表達式來獲取變量名稱和標識字段長度。通過該解析結構,我還可以創建XML測試數據,MSXML DOM代碼來操作該結構和HTML表單來測試這些IMS事務。

底線:正則表達式對於實現這一點非常有用。

+0

感謝您的正則表達式提示 – lemotdit 2009-11-04 16:20:11

0

對於z Rational Developer中,XML迅雷,Syncsort公司ETL ......有很多產品,將做到這一點。

真的,如果你學習模式數據類型的規則,你可以非常容易地手動完成。大多數情況下,您將處理xsd:string,xsd:decimal,xsd:integer和一些xsd:date的風格以匹配您的Cobol副本。

1

你可以試試我的Koopa Cobol parser項目。雖然它不做預處理,但我發現對於大多數抄本來說,這並不是真的有必要。它應該涵蓋大部分您對標準副本所期望的內容,如果沒有,您可以隨時擴展解析器。它可以將解析樹導出爲XML,然後可以以任何您想要的方式進行處理。

0

然後有REDEFINES子句用於以不同方式重新定義給定的一組連續字節。然後是OCCURS子句,它是一個固定長度數組的實現,OCCURS DEPENDING ON子句用於可變長度數組。

所以,NealB是對的;這是不是一個簡單的任務。