【发布时间】: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