Processador Cobol Copybook

Alguém me pode sugerir como extrair os campos de um copiador de Cobol? Será útil se vocês ajudarem com o excerto de código ou algum link? Exemplo: Quero extrair assim. Campo No. Nome Do Campo Tipo de campo (999 ou S9(4) ou x(5)....) Tipo arquivado-add (COMP, COMP-3, etc.,) Outros-detalhes (copie tudo até "."excluindo a cláusula PIC)

Author: DevilGod, 2018-01-30

4 answers

Aviso: eu mantenho cb2xml

Pode usar o cb2xml para analisar os seus livros de copiagens

  • em java cada campo é convertido para um objeto Cobol (com imagem, uso, ocorre campos)
  • para outras línguas, o cobol pode ser convertido em xml

Ver à procura da forma correcta com a expressão Regular com grupos de ordem diferente

Cobol:

   01 Ams-Vendor.
       03 Brand               Pic x(3).
       03 Location-details.
          05 Location-Number  Pic 9(4).
          05 Location-Type    Pic XX.
          05 Location-Name    Pic X(35).
       03 Address-Details.
          05 actual-address.
             10 Address-1     Pic X(40).
             10 Address-2     Pic X(40).
             10 Address-3     Pic X(35).
          05 Postcode         Pic 9(4).
          05 Empty            pic x(6).
          05 State            Pic XXX.
       03 Location-Active     Pic X.

Saída do cb2xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<copybook filename="cbl2xml_Test110.cbl">
    <item display-length="173" level="01" name="Ams-Vendor" position="1" storage-length="173">
        <item display-length="3" level="03" name="Brand" picture="x(3)" position="1" storage-length="3"/>
        <item display-length="41" level="03" name="Location-details" position="4" storage-length="41">
            <item display-length="4" level="05" name="Location-Number" numeric="true" picture="9(4)" position="4" storage-length="4"/>
            <item display-length="2" level="05" name="Location-Type" picture="XX" position="8" storage-length="2"/>
            <item display-length="35" level="05" name="Location-Name" picture="X(35)" position="10" storage-length="35"/>
        </item>
        <item display-length="128" level="03" name="Address-Details" position="45" storage-length="128">
            <item display-length="115" level="05" name="actual-address" position="45" storage-length="115">
                <item display-length="40" level="10" name="Address-1" picture="X(40)" position="45" storage-length="40"/>
                <item display-length="40" level="10" name="Address-2" picture="X(40)" position="85" storage-length="40"/>
                <item display-length="35" level="10" name="Address-3" picture="X(35)" position="125" storage-length="35"/>
            </item>
            <item display-length="4" level="05" name="Postcode" numeric="true" picture="9(4)" position="160" storage-length="4"/>
            <item display-length="6" level="05" name="Empty" picture="x(6)" position="164" storage-length="6"/>
            <item display-length="3" level="05" name="State" picture="XXX" position="170" storage-length="3"/>
        </item>
        <item display-length="1" level="03" name="Location-Active" picture="X" position="173" storage-length="1"/>
    </item>
</copybook>                

A aplicação interessante de cb2xml está descrita em a leitura dinâmica do COBOL redefine com C#

 0
Author: Bruce Martin, 2018-01-31 23:41:53

Disclaimer: I am the maintainer of ProLeap COBOL parser.

Você poderia usar o processador Rebol baseado em Java para extrair todos os tipos de dados de arquivos COBOL como números de nível, sequências de imagens etc. Também você pode extrair COMP, COMP-1 etc. da cláusula de Utilização como esta .

O processador do ProLeap COBOL está licenciado sob uma licença de código aberto, por isso pode ser usado gratuitamente.

 2
Author: u.wol, 2018-03-29 12:25:28

Se você usar um processador COBOL projetado para o propósito, então isso é relativamente fácil.

Tal analisador tem que estar disposto a analisar não apenas um programa inteiro, mas para analisar várias subpartes, como um co-livro contendo um parágrafo ou uma declaração de dados. Esta ferramenta tem de estar preparada para lidar com as complexidades encontradas em livros de copybooks reais, tais como declarações de campo, strings PIC, redefinições, 77 e 88 variáveis de Nível, todos os tipos de valores literais loucos usados como inicializadores, e os problemas confusos / feios com continuações de linha e substituição de cópia, ou ele só vai lidar com baunilha copybooks. Dependendo da origem do copybook, você pode ter que processar o texto como EBCDIC. É realmente um monte de trabalho para construir um analisador que lida com tudo isso.

Se você tentar hackeá-lo com regexes ou algo mais que não pode fazer algo como análise livre de contexto, a sua ferramenta resultante simplesmente não irá funcionar em quaisquer casos complexos.

Um bom analisador produzirá um resumo árvore de sintaxe capturando todos estes detalhes como uma estrutura de dados em memória a ser processada (isto é eficiente) ou como um arquivo XML a ser processado por outra ferramenta.

O nosso processador COBOL para o DMS pode lidar com tudo o que está acima e gerar um dump AST ou um equivalente XML.

Dado este fragmento de COBOL copybook:

003110****************************************
003120* GEGVD    - GEGVD-0872-WS
003130****************************************
003140 01  GEGVDC.
003150****************************************
003160****************************************
003170        10 GEJVD-CDA                            PIC X(11)
003180                                     VALUE
003190             '<<<GEGVD>>>'.
003200        10 GEJVD-COUNT                          PIC 9(9)
003210                                     VALUE     ZERO
003220                                     COMPUTATIONAL-3.
003230        10 GEJVD-ITER                           PIC 9(3)
003240                                     VALUE     ZERO
003250                                     COMPUTATIONAL-3.
003260        10 GEJVD-OP-CODE                        PIC X(1)
003270                                     VALUE     SPACE.
003280        10 GEJVD-STATUS                         PIC X(2)
003290                                     VALUE     SPACE.
003300        10 GEJVD-OPEN-SW                        PIC X(1)
003310                                     VALUE     SPACE.
003320        10 GEGVD-STATUS                         PIC X(2)
003330                                     VALUE     SPACE.
003340         10 STATUS-CODE REDEFINES
003350           GEGVD-STATUS                         PIC X(2).
003360 01  GEGVD.
003370****************************************
003380****************************************
003390     02 GEGVD-C.
003400        10 GEGVD-INPT-SCTN.
003410           15 GEGVD-ACTL-SERL-LN-CD             PIC X(1)
003420                                     VALUE     SPACE.
003430           15 GEGVD-FORM-VER-CD                 PIC X(5)
003440                                     VALUE     SPACE.
003450        10 GEGVD-OUTP-SCTN.
003460           15 GEGVD-GE-RULE-RSLT-CD             PIC X(1)
003470                                     VALUE     SPACE.
003480        10 GEGVD-WORK-SCTN.
003490           15 GEGVD-GE-RSN-00826-ID             PIC S9(5)
003500                                     VALUE     +00826
003510                                     COMPUTATIONAL-3.
003520           15 GEGVD-WS-N-LIT                    PIC X(1)
003530                                     VALUE     'N'.
003540           15 GEGVD-WS-S-LIT                    PIC X(1)
003550                                     VALUE     'S'.
003560           15 GEGVD-MPN-FORM-VER-CD             PIC X(5)
003570                                     VALUE     '99-00'.
003580           15 GEGVD-PLUS-MPN-FORM-VER-CD        PIC X(5)
003590                                     VALUE     '03-04'.
O nosso processador COBOL foi aplicado directamente no ficheiro copybook., produz a seguinte árvore de sintaxe abstracta:
C:\DMS\Domains\COBOL\IBMEnterprise\Tools\Parser\Source>run ../domainparser ++AST c:/DMS/Domains/COBOL/IBMEnterprise/Examples/SallieMae/copylibs/GEGVD.COP
COBOL~IBMEnterprise Domain Parser Version 2.7.17
Copyright (C) 1996-2017 Semantic Designs, Inc; All Rights Reserved; SD Confidential
Powered by DMS (R) Software Reengineering Toolkit
AST Optimizations: remove constant tokens, remove unary productions, compact sequences
Using encoding Unicode-UTF-8?ANSI +CRLF +1 /^I
393 tree nodes in tree.
(cobol_source_file@COBOL~IBMEnterprise=17#92facc0^0 Line 4 Column 8
 (record_or_data_item_entry_list@COBOL~IBMEnterprise=721#92fac80^1#92facc0:1 Line 4 Column 8
  (record_01_description_entry@COBOL~IBMEnterprise=576#92f6240^1#92fac80:1 Line 4 Column 8
   (one@COBOL~IBMEnterprise=2170#92f10e0^1#92f6240:1 Line 4 Column 8
   |(unsigned_integer_number@COBOL~IBMEnterprise=2579#92f1080^1#92f10e0:1[1] Line 4 Column 8
   | precomment 0:1 Type 0 Line 1 Column 7 `****************************************'
   | precomment 0:2 Type 0 Line 2 Column 7 `* GEGVD    - GEGVD-0872-WS'
   | precomment 0:3 Type 0 Line 3 Column 7 `****************************************')unsigned_integer_number
   )one#92f10e0
   (data_description_entry@COBOL~IBMEnterprise=607#92f12c0^1#92f6240:2 Line 4 Column 12
   |(composed_identifier@COBOL~IBMEnterprise=2351#92f12a0^1#92f12c0:1 Line 4 Column 12
   | (identifier@COBOL~IBMEnterprise=2850#92f10c0^1#92f12a0:1[`GEGVDC'] Line 4 Column 12
   |)composed_identifier#92f12a0
   )data_description_entry#92f12c0
   ('.'@COBOL~IBMEnterprise=2358#92f1280^1#92f6240:3[Keyword:4] Line 4 Column 18
   (subsidiary_description_entry_list@COBOL~IBMEnterprise=585#92f61c0^1#92f6240:4 Line 7 Column 15
   |(subsidiary_description_entry@COBOL~IBMEnterprise=588#92f1800^1#92f61c0:1 Line 7 Column 15
   | (level_number@COBOL~IBMEnterprise=2174#92f1360^1#92f1800:1 Line 7 Column 15
   |  (unsigned_integer_number@COBOL~IBMEnterprise=2579#92f1320^1#92f1360:1[10] Line 7 Column 15
   |   precomment 0:1 Type 0 Line 5 Column 7 `****************************************'
   |   precomment 0:2 Type 0 Line 6 Column 7 `****************************************')unsigned_integer_number
   | )level_number#92f1360
   | (data_description_entry@COBOL~IBMEnterprise=608#92f1720^1#92f1800:2 Line 7 Column 18
   |  (composed_identifier@COBOL~IBMEnterprise=2351#92f13c0^1#92f1720:1 Line 7 Column 18
   |   (identifier@COBOL~IBMEnterprise=2850#92f1340^1#92f13c0:1[`GEJVD-CDA'] Line 7 Column 18
er
   |  )composed_identifier#92f13c0
   |  (data_description_clause_list@COBOL~IBMEnterprise=613#92f16e0^1#92f1720:2 Line 7 Column 55
   |   (picture_clause@COBOL~IBMEnterprise=653#92f1520^1#92f16e0:1 Line 7 Column 55
   |   |(pic_picture@COBOL~IBMEnterprise=194#92f1420^1#92f1520:1 Line 7 Column 55
   |   | ('PIC'@COBOL~IBMEnterprise=2430#92f13a0^1#92f1420:1[Keyword:0] Line 7 Column 55
   |   |)pic_picture#92f1420
   |   |(optional_is@COBOL~IBMEnterprise=59#92f1440^1#92f1520:2 Line 7 Column 59
   |   |(picture_string@COBOL~IBMEnterprise=656#92f1500^1#92f1520:3 Line 7 Column 59
   |   | (alphanumeric_picture_string@COBOL~IBMEnterprise=2543#92f1400^1#92f1500:1[`X(11)'] Line 7 Column 59
VD.COP)alphanumeric_picture_string
   |   |)picture_string#92f1500
   |   )picture_clause#92f1520
   |   (value_is_clause@COBOL~IBMEnterprise=711#92f16a0^1#92f16e0:2 Line 8 Column 44
   |   |(value_values@COBOL~IBMEnterprise=202#92f1600^1#92f16a0:1 Line 8 Column 44
   |   | ('VALUE'@COBOL~IBMEnterprise=2437#92f14e0^1#92f1600:1[Keyword:0] Line 8 Column 44
   |   |)value_values#92f1600
   |   |(optional_is_are@COBOL~IBMEnterprise=63#92f1620^1#92f16a0:2 Line 9 Column 20
   |   |(non_figurative_non_numeric_literal@COBOL~IBMEnterprise=2205#92f1680^1#92f16a0:3 Line 9 Column 20
COP
   |   | (non_numeric_literal_string@COBOL~IBMEnterprise=2187#92f1660^1#92f1680:1 Line 9 Column 20
   |   |  (non_numeric_literal_quote@COBOL~IBMEnterprise=2840#92f15e0^1#92f1660:1[`<<<GEGVD>>>'] Line 9 Column 20
s/GEGVD.COP)non_numeric_literal_quote
   |   | )non_numeric_literal_string#92f1660
   |   |)non_figurative_non_numeric_literal#92f1680
   |   )value_is_clause#92f16a0
   |  )data_description_clause_list#92f16e0
   | )data_description_entry#92f1720
   | ('.'@COBOL~IBMEnterprise=2358#92f1640^1#92f1800:3[Keyword:0] Line 9 Column 33
   |)subsidiary_description_entry#92f1800
   |(subsidiary_description_entry_list@COBOL~IBMEnterprise=585#92f6120^1#92f61c0:2 Line 10 Column 15
   | (subsidiary_description_entry@COBOL~IBMEnterprise=588#92f1c20^1#92f6120:1 Line 10 Column 15
   |  (level_number@COBOL~IBMEnterprise=2174#92f18a0^1#92f1c20:1 Line 10 Column 15
   |   (unsigned_integer_number@COBOL~IBMEnterprise=2579#92f17e0^1#92f18a0:1[10] Line 10 Column 15
igned_integer_number
   |  )level_number#92f18a0
   |  (data_description_entry@COBOL~IBMEnterprise=608#92f1bc0^1#92f1c20:2 Line 10 Column 18
   |   (composed_identifier@COBOL~IBMEnterprise=2351#92f18e0^1#92f1bc0:1 Line 10 Column 18
   |   |(identifier@COBOL~IBMEnterprise=2850#92f1820^1#92f18e0:1[`GEJVD-COUNT'] Line 10 Column 18
tifier
   |   )composed_identifier#92f18e0
   |   (data_description_clause_list@COBOL~IBMEnterprise=613#92f1ba0^1#92f1bc0:2 Line 10 Column 55
   |   |(data_description_clause_list@COBOL~IBMEnterprise=613#92f1aa0^1#92f1ba0:1 Line 10 Column 55
   |   | (picture_clause@COBOL~IBMEnterprise=653#92f19a0^1#92f1aa0:1 Line 10 Column 55
   |   |  (pic_picture@COBOL~IBMEnterprise=194#92f1920^1#92f19a0:1 Line 10 Column 55
   |   |   ('PIC'@COBOL~IBMEnterprise=2430#92f18c0^1#92f1920:1[Keyword:0] Line 10 Column 55
   |   |  )pic_picture#92f1920
   |   |  (optional_is@COBOL~IBMEnterprise=59#92f1940^1#92f19a0:2 Line 10 Column 59
   |   |  (picture_string@COBOL~IBMEnterprise=655#92f1980^1#92f19a0:3 Line 10 Column 59
   |   |   (numeric_picture_string@COBOL~IBMEnterprise=2542#92f1900^1#92f1980:1[`9(9)'] Line 10 Column 59
COP)numeric_picture_string
   |   |  )picture_string#92f1980
   |   | )picture_clause#92f19a0
   |   | (value_is_clause@COBOL~IBMEnterprise=711#92f1a80^1#92f1aa0:2 Line 11 Column 44
   |   |  (value_values@COBOL~IBMEnterprise=202#92f1a00^1#92f1a80:1 Line 11 Column 44
   |   |   ('VALUE'@COBOL~IBMEnterprise=2437#92f1960^1#92f1a00:1[Keyword:0] Line 11 Column 44
   |   |  )value_values#92f1a00
   |   |  (optional_is_are@COBOL~IBMEnterprise=63#92f1a20^1#92f1a80:2 Line 11 Column 54
e
   |   |  (non_all_figurative_numeric_or_non_numeric_literal@COBOL~IBMEnterprise=2203#92f1a60^1#92f1a80:3 Line 11 Column 54
ae/copylibs/GEGVD.COP
   |   |   ('ZERO'@COBOL~IBMEnterprise=2533#92f19e0^1#92f1a60:1[Keyword:0] Line 11 Column 54
   |   |  )non_all_figurative_numeric_or_non_numeric_literal#92f1a60
   |   | )value_is_clause#92f1a80
   |   |)data_description_clause_list#92f1aa0
   |   |(usage_clause@COBOL~IBMEnterprise=684#92f1b80^1#92f1ba0:2 Line 12 Column 44
   |   | (optional_usage_is@COBOL~IBMEnterprise=674#92f1ae0^1#92f1b80:1 Line 12 Column 44
ge_is
   |   | ('COMPUTATIONAL-3'@COBOL~IBMEnterprise=2565#92f1a40^1#92f1b80:2[Keyword:0] Line 12 Column 44
'COMPUTATIONAL-3'
   |   |)usage_clause#92f1b80
   |   )data_description_clause_list#92f1ba0
   |  )data_description_entry#92f1bc0
   |  ('.'@COBOL~IBMEnterprise=2358#92f1b60^1#92f1c20:3[Keyword:0] Line 12 Column 59
   | )subsidiary_description_entry#92f1c20
   | (subsidiary_description_entry_list@COBOL~IBMEnterprise=585#92f5fe0^1#92f6120:2 Line 13 Column 15
   |  (subsidiary_description_entry@COBOL~IBMEnterprise=588#92f4120^1#92f5fe0:1 Line 13 Column 15
   |   (level_number@COBOL~IBMEnterprise=2174#92f1d40^1#92f4120:1 Line 13 Column 15
   |   |(unsigned_integer_number@COBOL~IBMEnterprise=2579#92f1be0^1#92f1d40:1[10] Line 13 Column 15
signed_integer_number
   |   )level_number#92f1d40
   |   (data_description_entry@COBOL~IBMEnterprise=608#92f40c0^1#92f4120:2 Line 13 Column 18
   |   |(composed_identifier@COBOL~IBMEnterprise=2351#92f1d80^1#92f40c0:1 Line 13 Column 18
   |   | (identifier@COBOL~IBMEnterprise=2850#92f1d00^1#92f1d80:1[`GEJVD-ITER'] Line 13 Column 18
tifier
   |   |)composed_identifier#92f1d80
   |   |(data_description_clause_list@COBOL~IBMEnterprise=613#92f40a0^1#92f40c0:2 Line 13 Column 55
   |   | (data_description_clause_list@COBOL~IBMEnterprise=613#92f1fa0^1#92f40a0:1 Line 13 Column 55
   |   |  (picture_clause@COBOL~IBMEnterprise=653#92f1e40^1#92f1fa0:1 Line 13 Column 55
   |   |   (pic_picture@COBOL~IBMEnterprise=194#92f1dc0^1#92f1e40:1 Line 13 Column 55
   |   |   |('PIC'@COBOL~IBMEnterprise=2430#92f1d60^1#92f1dc0:1[Keyword:0] Line 13 Column 55
   |   |   )pic_picture#92f1dc0
   |   |   (optional_is@COBOL~IBMEnterprise=59#92f1de0^1#92f1e40:2 Line 13 Column 59
   |   |   (picture_string@COBOL~IBMEnterprise=655#92f1e20^1#92f1e40:3 Line 13 Column 59
   |   |   |(numeric_picture_string@COBOL~IBMEnterprise=2542#92f1da0^1#92f1e20:1[`9(3)'] Line 13 Column 59
.COP)numeric_picture_string
   |   |   )picture_string#92f1e20
   |   |  )picture_clause#92f1e40
   |   |  (value_is_clause@COBOL~IBMEnterprise=711#92f1f80^1#92f1fa0:2 Line 14 Column 44
   |   |   (value_values@COBOL~IBMEnterprise=202#92f1f00^1#92f1f80:1 Line 14 Column 44
   |   |   |('VALUE'@COBOL~IBMEnterprise=2437#92f1e00^1#92f1f00:1[Keyword:0] Line 14 Column 44

   |   |   )value_values#92f1f00
   |   |   (optional_is_are@COBOL~IBMEnterprise=63#92f1f20^1#92f1f80:2 Line 14 Column 54
re
   |   |   (non_all_figurative_numeric_or_non_numeric_literal@COBOL~IBMEnterprise=2203#92f1f60^1#92f1f80:3 Line 14 Column 54
Mae/copylibs/GEGVD.COP
   |   |   |('ZERO'@COBOL~IBMEnterprise=2533#92f1ee0^1#92f1f60:1[Keyword:0] Line 14 Column 54
   |   |   )non_all_figurative_numeric_or_non_numeric_literal#92f1f60
   |   |  )value_is_clause#92f1f80
   |   | )data_description_clause_list#92f1fa0
   |   | (usage_clause@COBOL~IBMEnterprise=684#92f4080^1#92f40a0:2 Line 15 Column 44
   |   |  (optional_usage_is@COBOL~IBMEnterprise=674#92f4000^1#92f4080:1 Line 15 Column 44
age_is
   |   |  ('COMPUTATIONAL-3'@COBOL~IBMEnterprise=2565#92f1f40^1#92f4080:2[Keyword:0] Line 15 Column 44
)'COMPUTATIONAL-3'
   |   | )usage_clause#92f4080
   |   |)data_description_clause_list#92f40a0
   |   )data_description_entry#92f40c0
   |   ('.'@COBOL~IBMEnterprise=2358#92f4060^1#92f4120:3[Keyword:0] Line 15 Column 59
   |  )subsidiary_description_entry#92f4120
   |  (subsidiary_description_entry_list@COBOL~IBMEnterprise=585#92f5e60^1#92f5fe0:2 Line 16 Column 15

   |   (subsidiary_description_entry@COBOL~IBMEnterprise=588#92f45c0^1#92f5e60:1 Line 16 Column 15
   |   |(level_number@COBOL~IBMEnterprise=2174#92f4240^1#92f45c0:1 Line 16 Column 15
   |   | (unsigned_integer_number@COBOL~IBMEnterprise=2579#92f40e0^1#92f4240:1[10] Line 16 Column 15
nsigned_integer_number
   |   |)level_number#92f4240
   |   |(data_description_entry@COBOL~IBMEnterprise=608#92f44e0^1#92f45c0:2 Line 16 Column 18
   |   | (composed_identifier@COBOL~IBMEnterprise=2351#92f4280^1#92f44e0:1 Line 16 Column 18
   |   |  (identifier@COBOL~IBMEnterprise=2850#92f4200^1#92f4280:1[`GEJVD-OP-CODE'] Line 16 Column 18
identifier
   |   | )composed_identifier#92f4280
   |   | (data_description_clause_list@COBOL~IBMEnterprise=613#92f44a0^1#92f44e0:2 Line 16 Column 55
   |   |  (picture_clause@COBOL~IBMEnterprise=653#92f4340^1#92f44a0:1 Line 16 Column 55
   |   |   (pic_picture@COBOL~IBMEnterprise=194#92f42c0^1#92f4340:1 Line 16 Column 55
   |   |   |('PIC'@COBOL~IBMEnterprise=2430#92f4260^1#92f42c0:1[Keyword:0] Line 16 Column 55
   |   |   )pic_picture#92f42c0
   |   |   (optional_is@COBOL~IBMEnterprise=59#92f42e0^1#92f4340:2 Line 16 Column 59
   |   |   (picture_string@COBOL~IBMEnterprise=656#92f4320^1#92f4340:3 Line 16 Column 59
   |   |   |(alphanumeric_picture_string@COBOL~IBMEnterprise=2543#92f42a0^1#92f4320:1[`X(1)'] Line 16 Column 59
GEGVD.COP)alphanumeric_picture_string
   |   |   )picture_string#92f4320
   |   |  )picture_clause#92f4340
   |   |  (value_is_clause@COBOL~IBMEnterprise=711#92f4480^1#92f44a0:2 

** meio do AST eliminado devido às limitações de tamanho das respostas * *

   |   |   (level_number@COBOL~IBMEnterprise=2174#92f7140^1#92f7600:1 Line 44 Column 18
   |   |   |(unsigned_integer_number@COBOL~IBMEnterprise=2579#92f6fa0^1#92f7140:1[15] Line 44 Column 18
P)unsigned_integer_number
   |   |   )level_number#92f7140
   |   |   (data_description_entry@COBOL~IBMEnterprise=608#92f7540^1#92f7600:2 Line 44 Column 21
   |   |   |(composed_identifier@COBOL~IBMEnterprise=2351#92f71a0^1#92f7540:1 Line 44 Column 21
   |   |   | (identifier@COBOL~IBMEnterprise=2850#92f70c0^1#92f71a0:1[`GEGVD-WS-S-LIT'] Line 44 Column 21
COP)identifier
   |   |   |)composed_identifier#92f71a0
   |   |   |(data_description_clause_list@COBOL~IBMEnterprise=613#92f74a0^1#92f7540:2 Line 44 Column 55
P
   |   |   | (picture_clause@COBOL~IBMEnterprise=653#92f72c0^1#92f74a0:1 Line 44 Column 55
   |   |   |  (pic_picture@COBOL~IBMEnterprise=194#92f7220^1#92f72c0:1 Line 44 Column 55
   |   |   |   ('PIC'@COBOL~IBMEnterprise=2430#92f7160^1#92f7220:1[Keyword:0] Line 44 Column 55
   |   |   |  )pic_picture#92f7220
   |   |   |  (optional_is@COBOL~IBMEnterprise=59#92f7260^1#92f72c0:2 Line 44 Column 59
   |   |   |  (picture_string@COBOL~IBMEnterprise=656#92f72a0^1#92f72c0:3 Line 44 Column 59
   |   |   |   (alphanumeric_picture_string@COBOL~IBMEnterprise=2543#92f7200^1#92f72a0:1[`X(1)'] Line 44 Column 59
bs/GEGVD.COP)alphanumeric_picture_string
   |   |   |  )picture_string#92f72a0
   |   |   | )picture_clause#92f72c0
   |   |   | (value_is_clause@COBOL~IBMEnterprise=711#92f7460^1#92f74a0:2 Line 45 Column 44
   |   |   |  (value_values@COBOL~IBMEnterprise=202#92f7380^1#92f7460:1 Line 45 Column 44
   |   |   |   ('VALUE'@COBOL~IBMEnterprise=2437#92f7280^1#92f7380:1[Keyword:0] Line 45 Column 44
UE'
   |   |   |  )value_values#92f7380
   |   |   |  (optional_is_are@COBOL~IBMEnterprise=63#92f73a0^1#92f7460:2 Line 45 Column 54
s_are
   |   |   |  (non_figurative_non_numeric_literal@COBOL~IBMEnterprise=2205#92f7440^1#92f7460:3 Line 45 Column 54
/GEGVD.COP
   |   |   |   (non_numeric_literal_string@COBOL~IBMEnterprise=2187#92f7420^1#92f7440:1 Line 45 Column 54
COP
   |   |   |   |(non_numeric_literal_quote@COBOL~IBMEnterprise=2840#92f7360^1#92f7420:1[`S'] Line 45 Column 54
EGVD.COP)non_numeric_literal_quote
   |   |   |   )non_numeric_literal_string#92f7420
   |   |   |  )non_figurative_non_numeric_literal#92f7440
   |   |   | )value_is_clause#92f7460
   |   |   |)data_description_clause_list#92f74a0
   |   |   )data_description_entry#92f7540
   |   |   ('.'@COBOL~IBMEnterprise=2358#92f73c0^1#92f7600:3[Keyword:0] Line 45 Column 57
   |   |  )subsidiary_description_entry#92f7600
   |   |  (subsidiary_description_entry_list@COBOL~IBMEnterprise=585#92fa180^1#92fa200:2 Line 46 Column 18
.COP
   |   |   (subsidiary_description_entry@COBOL~IBMEnterprise=588#92f7b40^1#92fa180:1 Line 46 Column 18

   |   |   |(level_number@COBOL~IBMEnterprise=2174#92f7760^1#92f7b40:1 Line 46 Column 18
   |   |   | (unsigned_integer_number@COBOL~IBMEnterprise=2579#92f75a0^1#92f7760:1[15] Line 46 Column 18
OP)unsigned_integer_number
   |   |   |)level_number#92f7760
   |   |   |(data_description_entry@COBOL~IBMEnterprise=608#92f7a60^1#92f7b40:2 Line 46 Column 21
   |   |   | (composed_identifier@COBOL~IBMEnterprise=2351#92f77c0^1#92f7a60:1 Line 46 Column 21
   |   |   |  (identifier@COBOL~IBMEnterprise=2850#92f7660^1#92f77c0:1[`GEGVD-MPN-FORM-VER-CD'] Line 46 Column 21
s/GEGVD.COP)identifier
   |   |   | )composed_identifier#92f77c0
   |   |   | (data_description_clause_list@COBOL~IBMEnterprise=613#92f7a20^1#92f7a60:2 Line 46 Column 55
OP
   |   |   |  (picture_clause@COBOL~IBMEnterprise=653#92f7880^1#92f7a20:1 Line 46 Column 55
   |   |   |   (pic_picture@COBOL~IBMEnterprise=194#92f7800^1#92f7880:1 Line 46 Column 55
   |   |   |   |('PIC'@COBOL~IBMEnterprise=2430#92f77a0^1#92f7800:1[Keyword:0] Line 46 Column 55

   |   |   |   )pic_picture#92f7800
   |   |   |   (optional_is@COBOL~IBMEnterprise=59#92f7820^1#92f7880:2 Line 46 Column 59
   |   |   |   (picture_string@COBOL~IBMEnterprise=656#92f7860^1#92f7880:3 Line 46 Column 59
   |   |   |   |(alphanumeric_picture_string@COBOL~IBMEnterprise=2543#92f77e0^1#92f7860:1[`X(5)'] Line 46 Column 59
ibs/GEGVD.COP)alphanumeric_picture_string
   |   |   |   )picture_string#92f7860
   |   |   |  )picture_clause#92f7880
   |   |   |  (value_is_clause@COBOL~IBMEnterprise=711#92f79c0^1#92f7a20:2 Line 47 Column 44
   |   |   |   (value_values@COBOL~IBMEnterprise=202#92f7920^1#92f79c0:1 Line 47 Column 44
   |   |   |   |('VALUE'@COBOL~IBMEnterprise=2437#92f7840^1#92f7920:1[Keyword:0] Line 47 Column 44
LUE'
   |   |   |   )value_values#92f7920
   |   |   |   (optional_is_are@COBOL~IBMEnterprise=63#92f7940^1#92f79c0:2 Line 47 Column 54
is_are
   |   |   |   (non_figurative_non_numeric_literal@COBOL~IBMEnterprise=2205#92f79a0^1#92f79c0:3 Line 47 Column 54
s/GEGVD.COP
   |   |   |   |(non_numeric_literal_string@COBOL~IBMEnterprise=2187#92f7980^1#92f79a0:1 Line 47 Column 54
.COP
   |   |   |   | (non_numeric_literal_quote@COBOL~IBMEnterprise=2840#92f7900^1#92f7980:1[`99-00'] Line 47 Column 54
ibs/GEGVD.COP)non_numeric_literal_quote
   |   |   |   |)non_numeric_literal_string#92f7980
   |   |   |   )non_figurative_non_numeric_literal#92f79a0
   |   |   |  )value_is_clause#92f79c0
   |   |   | )data_description_clause_list#92f7a20
   |   |   |)data_description_entry#92f7a60
   |   |   |('.'@COBOL~IBMEnterprise=2358#92f7960^1#92f7b40:3[Keyword:0] Line 47 Column 61
   |   |   )subsidiary_description_entry#92f7b40
   |   |   (subsidiary_description_entry@COBOL~IBMEnterprise=588#92fa0c0^1#92fa180:2 Line 48 Column 18

   |   |   |(level_number@COBOL~IBMEnterprise=2174#92f7c80^1#92fa0c0:1 Line 48 Column 18
   |   |   | (unsigned_integer_number@COBOL~IBMEnterprise=2579#92f7ae0^1#92f7c80:1[15] Line 48 Column 18
OP)unsigned_integer_number
   |   |   |)level_number#92f7c80
   |   |   |(data_description_entry@COBOL~IBMEnterprise=608#92f7fc0^1#92fa0c0:2 Line 48 Column 21
   |   |   | (composed_identifier@COBOL~IBMEnterprise=2351#92f7cc0^1#92f7fc0:1 Line 48 Column 21
   |   |   |  (identifier@COBOL~IBMEnterprise=2850#92f7b60^1#92f7cc0:1[`GEGVD-PLUS-MPN-FORM-VER-CD'] Line 48 Column 21
pylibs/GEGVD.COP)identifier
   |   |   | )composed_identifier#92f7cc0
   |   |   | (data_description_clause_list@COBOL~IBMEnterprise=613#92f7f60^1#92f7fc0:2 Line 48 Column 55
OP
   |   |   |  (picture_clause@COBOL~IBMEnterprise=653#92f7de0^1#92f7f60:1 Line 48 Column 55
   |   |   |   (pic_picture@COBOL~IBMEnterprise=194#92f7d20^1#92f7de0:1 Line 48 Column 55
   |   |   |   |('PIC'@COBOL~IBMEnterprise=2430#92f7ca0^1#92f7d20:1[Keyword:0] Line 48 Column 55

   |   |   |   )pic_picture#92f7d20
   |   |   |   (optional_is@COBOL~IBMEnterprise=59#92f7d40^1#92f7de0:2 Line 48 Column 59
   |   |   |   (picture_string@COBOL~IBMEnterprise=656#92f7da0^1#92f7de0:3 Line 48 Column 59
   |   |   |   |(alphanumeric_picture_string@COBOL~IBMEnterprise=2543#92f7ce0^1#92f7da0:1[`X(5)'] Line 48 Column 59
ibs/GEGVD.COP)alphanumeric_picture_string
   |   |   |   )picture_string#92f7da0
   |   |   |  )picture_clause#92f7de0
   |   |   |  (value_is_clause@COBOL~IBMEnterprise=711#92f7f20^1#92f7f60:2 Line 49 Column 44
   |   |   |   (value_values@COBOL~IBMEnterprise=202#92f7e80^1#92f7f20:1 Line 49 Column 44
   |   |   |   |('VALUE'@COBOL~IBMEnterprise=2437#92f7d80^1#92f7e80:1[Keyword:0] Line 49 Column 44
LUE'
   |   |   |   )value_values#92f7e80
   |   |   |   (optional_is_are@COBOL~IBMEnterprise=63#92f7ea0^1#92f7f20:2 Line 49 Column 54
is_are
   |   |   |   (non_figurative_non_numeric_literal@COBOL~IBMEnterprise=2205#92f7f00^1#92f7f20:3 Line 49 Column 54
s/GEGVD.COP
   |   |   |   |(non_numeric_literal_string@COBOL~IBMEnterprise=2187#92f7ee0^1#92f7f00:1 Line 49 Column 54
.COP
   |   |   |   | (non_numeric_literal_quote@COBOL~IBMEnterprise=2840#92f7e60^1#92f7ee0:1[`03-04'] Line 49 Column 54
ibs/GEGVD.COP)non_numeric_literal_quote
   |   |   |   |)non_numeric_literal_string#92f7ee0
   |   |   |   )non_figurative_non_numeric_literal#92f7f00
   |   |   |  )value_is_clause#92f7f20
   |   |   | )data_description_clause_list#92f7f60
   |   |   |)data_description_entry#92f7fc0
   |   |   |('.'@COBOL~IBMEnterprise=2358#92f7ec0^1#92fa0c0:3[Keyword:0] Line 49 Column 61
   |   |   )subsidiary_description_entry#92fa0c0
   |   |  )subsidiary_description_entry_list#92fa180
   |   | )subsidiary_description_entry_list#92fa200
   |   |)subsidiary_description_entry_list#92fa340
   |   )subsidiary_description_entry_list#92fa3c0
   |  )subsidiary_description_entry#92fa500
   | )subsidiary_description_entry_list#92fa6e0
   |)subsidiary_description_entry_list#92fa7a0
   )subsidiary_description_entry#92fa840
  )record_01_description_entry#92faac0
 )record_or_data_item_entry_list#92fac80
)cobol_source_file#92facc0

C:\DMS\Domains\COBOL\IBMEnterprise\Tools\Parser\Source>
Uma vez que você tem a árvore, é bastante simples caminhar sobre a árvore e extrair fatos sobre as declarações do símbolo de COBOL.
 0
Author: Ira Baxter, 2018-01-31 10:13:44
Aviso: nilchoud.pythonanywhere.com Olá, verifica o local. https://nilchoud.pythonanywhere.com este site foi concebido especialmente para os cadernos de COBOL.

Por Exemplo. O teu livro de dados é:

000100 01  BGG-FILE-REC.
000200     03  BGG-RCD-KEY.
000300         05  BGG-DUDENAME            PIC XXXX.
000400         05  BGG-DUDEADDR            PIC XX.
000500         05  BGG-HAIRCOLOR           PIC X(71).
000600         05  BGG-EYECOLOR            PIC X(8).

Então a saída será:

SR#  LEVEL   FIELD NAME                 PICTURE   TYPE      START      END   LENGTH

0  1  BGG-FILE-REC.                 @         AN            1       85       85
1  3  BGG-RCD-KEY.                  @         AN            1       85       85
2  5  BGG-DUDENAME                  XXXX.     AN            1        4        4
3  5  BGG-DUDEADDR                  XX.       AN            5        6        2
4  5  BGG-HAIRCOLOR                 X(71).    AN            7       77       71
5  5  BGG-EYECOLOR                  X(8).     AN           78       85        8
Espero que isto resolva o teu problema.
 0
Author: Nilesh, 2018-07-11 04:38:11