Syntax COBOL应为文件结尾

Syntax COBOL应为文件结尾,syntax,cobol,gnucobol,Syntax,Cobol,Gnucobol,我在cygwin终端中使用OpenCOBOL来编译这个程序,该程序只需读取输入文本文件并将其打印到格式化的输出文件。当我尝试编译时,出现以下错误: programonerjm.cbl:13: Error: syntax error, unexpected "SOURCE-COMPUTER", expecting "end of file" 我也不完全确定我的程序划分是否正确 有人能告诉我我做错了什么吗?我知道这可能是一个小错误,这让我发疯 IDENTIFICATION DIVIS

我在cygwin终端中使用OpenCOBOL来编译这个程序,该程序只需读取输入文本文件并将其打印到格式化的输出文件。当我尝试编译时,出现以下错误:

programonerjm.cbl:13: Error: syntax error, unexpected "SOURCE-COMPUTER", expecting "end of file"
我也不完全确定我的
程序划分是否正确

有人能告诉我我做错了什么吗?我知道这可能是一个小错误,这让我发疯

       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.
以下是我试图读取的文本文件:

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

正如第13行的错误所示。它似乎与程序部门没有任何关系。我对开放COBOL不太了解,因为我在COBOL-400上工作过,所以我猜源计算机和目标计算机都被当作注释,因此您应该尝试让它们注释(通过放置*)并尝试,因为您不一定要定义它们。请告知是否有帮助。

鉴于示例中的源代码,我在GnuCOBOL 1.1中遇到以下错误(至少更新到此版本):

这是指
值('PAGE 0X')。
,我相信您会自己解决这个问题

使用GnuCOBOL 2.0 rc-1时,编译器错误消息为:

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'
您可以忽略“忽略冗余”消息或修复它(这只是一个警告,因为这可能会指向问题-但您没有任何问题)。为了遵循程序其余部分的风格(以及编写看起来不像COBOL-74的代码),我建议删除
100-MAIN-MODULE
PERFORM
语句之后的句点

第137行遗漏了段落名称后的一个句点(这同样适用于以下段落名称,但解析器当前无法从“unknown statement”中恢复,因此您只能逐个看到)

下一个错误是:139将发布下一个:

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
工作存储
或引用中重命名var(我假设您指的是
页数
)。
CLOSE
应使用文件名(在本例中为
OUTPUT-INV-REPORT
),而不是记录名(
INVENTORY-REPORT

这就解决了语法问题

附加提示:代替

       MOVE HEADER-LINE-ONE TO INVENTORY-REPORT
            WRITE INVENTORY-REPORT
            AFTER ADVANCING 1 LINE
您可以省略附加的
移动
(在任何情况下都是在内部完成的,但看起来更好;-),并明确说明这仅适用于
写入

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

您是否有一个编辑器可以显示源数据中的“特殊字符”(行尾等)。你可能有一些零散的。您使用的是OpenCOBOL还是处理该错误的最新GnuCOBOL。其他提示:您可能希望在标题后添加一个
WRITE
,我假设您希望
中执行150-PRINT
,而不是结束
(否则,您可能只需要一行书面详细信息。@user3538149您是否遗漏了什么,或者您得到了一个对您有用的答案?在第二种情况下:请将其标记为“对我有用”这类结束问题。请您尝试一下GnuCOBOL(以前的OpenCOBOL):-)“是”:它们被视为注释,“否”,您不需要将它们显式标记为注释。
       WRITE INVENTORY-REPORT
            FROM HEADER-LINE-ONE
            AFTER ADVANCING 1 LINE