user3538149
user3538149

Reputation: 21

COBOL expecting end of file

I am using OpenCOBOL in the cygwin terminal to compile this program that is just supposed to read from an input text file and print it to a formatted output file. When I try to compile I get this error:

programonerjm.cbl:13: Error: syntax error, unexpected "SOURCE-COMPUTER", expecting "end of file"

I am not completely sure my procedure division is correct either.

Can someone please tell me what I am doing wrong? I know it is probably a small error and it is driving me crazy.

       IDENTIFICATION DIVISION. 
       PROGRAM-ID. PROGRAM1. 
       AUTHOR. ME.
      **********************************************************
      * Purpose: Program that outputs an Inventory Report for
      * Drakea Bike Parts Warehouse.
      **********************************************************
       ENVIRONMENT DIVISION. 

       CONFIGURATION SECTION.
       SOURCE-COMPUTER. IBM-PC.
       OBJECT-COMPUTER. IBM-PC.

       INPUT-OUTPUT SECTION.

       FILE-CONTROL.
            SELECT INV-FILE ASSIGN TO 'PR1FA16.txt'
                 ORGANIZATION IS LINE SEQUENTIAL. 
            SELECT OUTPUT-INV-REPORT 
                 ASSIGN TO PRINTER 'OUTPUT-INV-REPORT.DAT'.

      **********************************************************

       DATA DIVISION.

       FILE SECTION.

       FD INV-FILE.
       01 INV-RECORD.
            05  CAT-NUM                    PIC X(5).
            05  ITEM-DESC                  PIC X(20).
            05  UNIT-PURCHASE-PRICE        PIC 999V99.
            05                             PIC X(7).
            05  QUANTITY-IN-STOCK          PIC 9(3).
            05  QUANTITY-ON-ORDER          PIC 9(3).
            05  REORDER-POINT              PIC 9(3).

       FD  OUTPUT-INV-REPORT.   
       01  INVENTORY-REPORT.       
            05                             PIC X(80).

       WORKING-STORAGE SECTION.
      * EOF FLAG
      * REPORT SECTION - CREATE HEADERS

       01 FLAGS-N-SWITCHES.
            05 EOF-FLAG              PIC X(3)      VALUE 'YES'.

       01 NUMBER-OF-PAGES            PIC 9(2)      VALUE 1.

       01 HEADER-LINE-ONE.
            05  MYDATE               PIC X(10)     VALUE '09/16/2016'.
            05                       PIC X(5)      VALUE SPACES.
            05  INITIALS             PIC X(3)      VALUE 'RJM'.
            05                       PIC X(10)     VALUE SPACES.
            05       PIC X(27)     VALUE 'DRAKEA BIKE PARTS WAREHOUSE'.
            05                       PIC X(16)     VALUE SPACES.
            05  NUM-OF-PAGES         PIC X(7)      VALUE('PAGE 0X').
            05                       PIC X(2)      VALUE SPACES.

       01 HEADER-LINE-TWO.
            05                       PIC X(36)     VALUE SPACES.
            05  NAME-OF-REPORT   PIC X(12)     VALUE 'STOCK REPORT'.
            05                       PIC X(32)     VALUE SPACES.

       01 CATEGORY-HEADER-ONE. 
            05                       PIC X(1)      VALUE SPACES.
            05                       PIC X(5)      VALUE 'CAT'.
            05                       PIC X(11)     VALUE SPACES.
            05                       PIC X(4)      VALUE 'ITEM'.
            05                       PIC X(11)     VALUE SPACES.
            05                       PIC X(8)      VALUE 'PURCHASE'.
            05                       PIC X(3)      VALUE SPACES.
            05                       PIC X(8)      VALUE 'QUANTITY'.
            05                       PIC X(4)      VALUE SPACES.
            05                       PIC X(8)      VALUE 'QUANTITY'.
            05                       PIC X(4)      VALUE SPACES.
            05                       PIC X(7)      VALUE 'REORDER'.
            05                       PIC X(8)      VALUE SPACES.

       01 CATEGORY-HEADER-TWO.
            05                       PIC X(1)      VALUE SPACES.
            05                       PIC X(3)      VALUE 'NUM'.
            05                       PIC X(8)      VALUE SPACES.
            05                       PIC X(11)     VALUE 'DESCRIPTION'.
            05                       PIC X(8)      VALUE SPACES.
            05                       PIC X(5)      VALUE 'PRICE'.
            05                       PIC X(6)      VALUE SPACES.
            05                       PIC X(6)      VALUE 'IN STK'.
            05                       PIC X(5)      VALUE SPACES.
            05                       PIC X(8)      VALUE 'ON ORDER'.
            05                       PIC X(5)      VALUE SPACES.
            05                       PIC X(5)      VALUE 'POINT'.
            05                       PIC X(8)      VALUE SPACES. 

       01 DETAIL-LINE.
            05  CATALOG-NUM          PIC X(5).
            05                       PIC X(3)      VALUE SPACES.
            05  ITEM-DESCRIPTION     PIC X(20).
            05                       PIC X(3)      VALUE SPACES.
            05  PURCHASE-PRICE       PIC $$$$V99.
            05                       PIC X(4)      VALUE SPACES.
            05  QUANTITY-IN-STK      PIC 99V999.
            05                       PIC X(6)      VALUE SPACES.
            05  QUANT-ON-ORDER       PIC 99V999.
            05                       PIC X(5)      VALUE SPACES.
            05  REORDER-PNT          PIC 99V999.
            05                       PIC X(8)      VALUE SPACES.

      **********************************************************

       PROCEDURE DIVISION.  
       100-MAIN-MODULE.
           PERFORM 110-HOUSEKEEPING.
           PERFORM 120-READ-FILES.
           PERFORM 130-PRINT-HEADERS.
           PERFORM 140-PROCESS-RECORDS.
           PERFORM 150-PRINT.
           PERFORM 160-CLOSE-ROUTINE.
           .

       110-HOUSEKEEPING.
           OPEN    INPUT     INV-FILE
                   OUTPUT    OUTPUT-INV-REPORT
           .

       120-READ-FILES.
            PERFORM UNTIL EOF-FLAG = 'NO'
                    READ INV-FILE
                        AT END
                            MOVE 'NO' TO EOF-FLAG   
                        NOT AT END
                            PERFORM 140-PROCESS-RECORDS
                    END-READ
            END-PERFORM
            .

       130-PRINT-HEADERS
           MOVE NUM-OF-PAGES TO NUM-PAGES
           MOVE HEADER-LINE-ONE TO INVENTORY-REPORT
                WRITE INVENTORY-REPORT
                AFTER ADVANCING 1 LINE
           MOVE HEADER-LINE-TWO TO INVENTORY-REPORT
                WRITE INVENTORY-REPORT
                AFTER ADVANCING 2 LINES
           MOVE CATEGORY-HEADER-ONE TO INVENTORY-REPORT
                WRITE INVENTORY-REPORT
                AFTER ADVANCING 2 LINES
           MOVE CATEGORY-HEADER-TWO TO INVENTORY-REPORT
                WRITE INVENTORY-REPORT
                AFTER ADVANCING 1 LINE.

       140-PROCESS-RECORDS
            MOVE CAT-NUM TO CATALOG-NUM
            MOVE ITEM-DESC TO ITEM-DESCRIPTION
            MOVE UNIT-PURCHASE-PRICE TO PURCHASE-PRICE
            MOVE QUANTITY-IN-STOCK TO QUANTITY-IN-STK
            MOVE QUANTITY-ON-ORDER TO QUANT-ON-ORDER
            MOVE REORDER-POINT TO REORDER-PNT.          

       150-PRINT 
            MOVE DETAIL-LINE TO INVENTORY-REPORT
            WRITE INVENTORY-REPORT.

       160-CLOSE-ROUTINE
            CLOSE INV-FILE
                  INVENTORY-REPORT
            STOP RUN.

Here is the text file I am trying to read from:

X7Y10Gas Tank            12595      010001000100005000750010
X8Y20Gas Cap             07599      020001000000002500000000
X6N30Seat                50000      001000000005000200020003
Y9T40Spark Plugs         02595      002001800200018000800045
T8N50Helmet              00385      010000000050000000800000
S9M60Slick 50            05999      000000500020001000000005
J9M70Gear Box            99999      070500000700000000000100
K3L80Muffler             35095      100000051000000205000256
L3D90Water Hose          02995      257000002000000005700300
M3100Tool Box            25995      078002501500025010000750
D4110Carborator          05900      000501000050007500250001
S8120Generator           17700      001000800025001500200015

Upvotes: 2

Views: 2763

Answers (2)

Simon Sobisch
Simon Sobisch

Reputation: 7287

Given the source in the sample I get the following error with GnuCOBOL 1.1 (at least update to this version):

PROGRAM1.cob:58: Error: syntax error, unexpected '('

This refers to VALUE('PAGE 0X')., I'm sure you'll fix this on one your own.

Using GnuCOBOL 2.0 rc-1 the compiler error message is:

PROGRAM1.cob: 58: error: syntax error, unexpected (
PROGRAM1.cob: in paragraph '100-MAIN-MODULE':
PROGRAM1.cob: 119: warning: ignoring redundant .
PROGRAM1.cob: in paragraph '120-READ-FILES':
PROGRAM1.cob: 137: error: unknown statement '130-PRINT-HEADERS'

You can ignore the "ignore redundant" message or fix it (it is just a warning as this could point to issues - but you don't have any there). To follow the style of the rest of the program (and writing code that looks less like COBOL-74) I'd suggest to remove the periods after the PERFORM statements in 100-MAIN-MODULE.

Line 137 misses a period after the paragraph name (the same applies to the following paragraph names but the parser currently doesn't recover from "unknown statement" so you would only see this one by one).

The next errors would be:139 would be issued next:

in paragraph '130-PRINT-HEADERS':
139: error: 'NUM-PAGES' is not defined
in paragraph '160-CLOSE-ROUTINE':
167: error: 'INVENTORY-REPORT' is not a file name

Either rename the var (I assume you meant NUMBER-OF-PAGES) in the WORKING-STORAGE or in the references. CLOSE should use the file name (in this case OUTPUT-INV-REPORT) not the record-name (INVENTORY-REPORT).

This solves the syntax issues.

Additional hint: Instead of

       MOVE HEADER-LINE-ONE TO INVENTORY-REPORT
            WRITE INVENTORY-REPORT
            AFTER ADVANCING 1 LINE

You may omit the additional MOVE (it is done internal in any case but it just looks better ;-) and makes clear that this is only done for the WRITE:

       WRITE INVENTORY-REPORT
            FROM HEADER-LINE-ONE
            AFTER ADVANCING 1 LINE

Upvotes: 4

Khalid Mahmood
Khalid Mahmood

Reputation: 31

As the Error says line 13. It don't seem to have anything related to Procedure division. I don't know much about Open COBOL as I've worked on COBOL-400 so I guess Source-Computer and Object-Computer are taken as comments, hence you should try to make them comment (by putting *) and try, because you don't necessarily define them. please inform if it helps.

Upvotes: 0

Related Questions