【问题标题】:Bankers algorithm in cobolcobol中的银行家算法
【发布时间】:2018-05-12 10:40:31
【问题描述】:

我遇到的问题是我在工作存储中定义的行 COLUMNS 部分,当它在200-BANKER-FILL 部分中使用时给我一个 COLUMNS 出乎意料的语法错误。实际错误是

'error: 语法错误,意外的 COLUMNS'

我似乎无法理解在工作存储部分中声明 COLUMNS 会被认为是意外的,任何帮助都会很棒

   IDENTIFICATION DIVISION.
   PROGRAM-ID.BankerAlgoritm.
   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT BANKER-FILE-IN  ASSIGN TO 's1.txt'
           ORGANIZATION IS LINE SEQUENTIAL.

   *> FUNCTION NUMVAL (STRING) 

   DATA DIVISION.
   FILE SECTION.
   FD  BANKER-FILE-IN.
   01  BANKER-LINE                   PIC X(9).
   WORKING-STORAGE SECTION.
   01  ARE-THERE-MORE-RECORDS        PIC X(3)        VALUE 'YES'.
           88  NO-MORE-RECORDS                       VALUE 'NO '.
   01  ROWS                          PIC 9.
   01  COLUMNS                       PIC 9.
   01   BANKER-TABLE-ASSIGN.
        05   ASSIGN-ROW OCCURS 5 TIMES INDEXED BY X.
            10   ASSIGN-COLUMN OCCURS 4 TIMES INDEXED BY Y.
                20  ASSIGN-RESOURCE         PIC 9.
   01   BANKER-TABLE-MAX.
        05   MAX-ROW OCCURS 5 TIMES INDEXED BY X.
            10   MAX-COLUMN OCCURS 4 TIMES INDEXED BY Y.
                20  MAX-RESOURCE         PIC 9.
   01   BANKER-TABLE-AVAL.
        05   AVAL-COLUMN OCCURS 4 TIMES INDEXED BY Y.
            10  AVAL-RESOURCE            PIC 9.
   01   BANKER-TABLE-REQUEST.
        05   REQUEST-COLUMN OCCURS 4 TIMES INDEXED BY Y.
            10  REQUEST-RESOURCE         PIC 9.
   01   BANKER-REQUEST-LINE.
        05  REQUEST-LINE                 PIC 9.
        05  SPACER                       PIC X.
        05  REQUEST-ONE                  PIC 9.
        05                               PIC X.
        05  REQUEST-TWO                  PIC 9.
        05                               PIC X.
        05  REQUEST-THREE                PIC 9.
        05                               PIC X.
        05  REQUEST-FOUR                 PIC 9.
   01   MATRIX.
        05  ONE                          PIC 9.
        05                               PIC X.
        05  TWO                          PIC 9.
        05                               PIC X.
        05  THREE                        PIC 9.
        05                               PIC X.
        05  FOUR                         PIC 9.
   01   HOLDING-VAL-SINGLE               PIC 9.
   01   LINE-COUNT                       PIC 99 VALUE 0.
   01   SAFE-STATE                       PIC XXXXX VALUE 'FALSE'.
   PROCEDURE DIVISION.
  *>****************************************
  *>  Controls direction of program logic  *
  *>  and reads the first record.          *
  *>****************************************
   100-MAIN-MODULE.
       PERFORM UNTIL NO-MORE-RECORDS
           READ BANKER-FILE-IN
               AT END
                 MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
               NOT AT END
                 PERFORM 200-BANKER-FILL
           END-READ
       END-PERFORM         
      *> PERFORM 300-FILL-NEED
      *> PERFORM 400-SAFE-STATE
      *>IF SAFE-STATE = 'TRUE'
        *>  PERFORM 500-REQUEST             
    *>   PERFORM 600-END-OF-JOB-RTN
       STOP RUN.
  200-BANKER-FILL.
        ADD 1 TO LINE-COUNT
        IF LINE-COUNT IS EQUAL TO 1
            MOVE BANKER-LINE TO ROWS
        END-IF
        IF LINE-COUNT IS EQUAL TO 3
            MOVE BANKER-LINE TO COLUMNS
        END-IF
        IF LINE-COUNT >= 5 AND <= 10
        *>FILL ASSIGNED MATRIX
            MOVE BANKER-LINE TO MATRIX
            MOVE ONE TO ASSIGN-COLUMN(LINE-COUNT - 4, 1)
            MOVE TWO TO ASSIGN-COLUMN(LINE-COUNT - 4, 2)
            MOVE THREE TO ASSIGN-COLUMN(LINE-COUNT - 4, 3)
            MOVE FOUR TO ASSIGN-COLUMN(LINE-COUNT - 4, 4)
        END-IF
        IF LINE-COUNT >= 12 AND <= 17
        *>FILL IN MAX MATRIX
            MOVE BANKER-LINE TO MATRIX
            MOVE ONE TO MAX-COLUMN(LINE-COUNT - 11, 1)
            MOVE TWO TO MAX-COLUMN(LINE-COUNT - 11, 2)
            MOVE THREE TO MAX-COLUMN(LINE-COUNT - 11, 3)
            MOVE FOUR TO MAX-COLUMN(LINE-COUNT - 11, 4)
        END-IF
        IF LINE-COUNT = 19
        *> FILL IN AVAILIBLE MATRIX
            MOVE BANKER-LINE TO MATRIX
            MOVE ONE TO AVAL-COLUMN(1)
            MOVE TWO TO AVAL-COLUMN(2)
            MOVE THREE TO AVAL-COLUMN(3)
            MOVE FOUR TO AVAL-COLUMN(4)
        END-IF
        IF LINE-COUNT = 21
        *> FILL IN REQUEST
            MOVE BANKER-LINE TO BANKER-REQUEST-LINE
        END-IF.
  *>*************************************************
  *>  Performed from 100-MAIN-MODULE. Closes files  *
  *>*************************************************
   600-END-OF-JOB-RTN.
       CLOSE BANKER-FILE-IN.

下一部分是输入文件

5

4

0 0 1 2
1 0 0 0
1 3 5 4
0 6 3 2
0 0 1 4

0 0 1 2
1 7 5 0
2 3 5 6
0 6 5 2
0 6 5 6

1 5 2 0

1:0 4 2 0

【问题讨论】:

  • @user6542823 我在任何语言中使用了 45 年的每个编译器都在某个时候给出了“语法错误”。有时解析器没有更好的知识。
  • @user6542823 那又怎样?这并不意味着您有权声称它从未发生过。
  • 确定不是COLUMN?这是一个保留字。
  • @EJP 实际上出于某种原因将工作从 COLUMNS 更改为 COLUMN1 使其工作,它必须至少在编译器中是某种保留字,谢谢,我永远不会尝试更改它因为它没有在我的文本编辑器中作为保留字出现
  • COLUMN 是保留的。

标签: multidimensional-array cobol


【解决方案1】:

COLUMN 是 COBOL 中的保留字。 Here 是保留字列表以供将来参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2021-11-07
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多