2009-11-04 115 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是对的;这是不是一个简单的任务。