cobol - GnuCOBOL 报告编写器:语法错误,意外 IS,期待 LEADING 或 TRAILING
问题描述
安装了 GnuCOBOL 3.0-rc1.0版来试用最近添加的 Report Writer。尝试编译第一个清单[PIC X(52) 是我对书中太小的 PIC X(51) 的修复]在 Michael Coughlan 为程序员编写 COBOL 的第 18 章中会引发错误:
Listing18-1.cbl:99: error: syntax error, unexpected IS, expecting LEADING or TRAILING
Listing18-1.cbl:99: error: PROCEDURE DIVISION header missing
Listing18-1.cbl:99: error: syntax error, unexpected .
Listing18-1.cbl:100: error: unknown statement '03'
Listing18-1.cbl:101: error: unknown statement '03'
Listing18-1.cbl:102: error: unknown statement '03'
Listing18-1.cbl:104: error: unknown statement '02'
Listing18-1.cbl:105: error: unknown statement '03'
Listing18-1.cbl:106: error: unknown statement '03'
Listing18-1.cbl:107: error: unknown statement '03'
Listing18-1.cbl:109: error: unknown statement '01'
Listing18-1.cbl:110: error: unknown statement '02'
Listing18-1.cbl:111: error: unknown statement '03'
Listing18-1.cbl:112: error: unknown statement '03'
Listing18-1.cbl:113: error: unknown statement '03'
Listing18-1.cbl:115: error: unknown statement '01'
Listing18-1.cbl:117: error: unknown statement '02'
Listing18-1.cbl:118: error: unknown statement '03'
Listing18-1.cbl:119: error: unknown statement '03'
Listing18-1.cbl:120: error: unknown statement '03'
Listing18-1.cbl:121: error: unknown statement '03'
Listing18-1.cbl:123: error: unknown statement '01'
Listing18-1.cbl:124: error: unknown statement '02'
Listing18-1.cbl:125: error: unknown statement '03'
Listing18-1.cbl:127: error: unknown statement '01'
Listing18-1.cbl:128: error: unknown statement '02'
Listing18-1.cbl:129: error: unknown statement '03'
Listing18-1.cbl:130: error: unknown statement '03'
Listing18-1.cbl:131: error: unknown statement '03'
Listing18-1.cbl:133: error: syntax error, unexpected PROCEDURE
Listing18-1.cbl: in paragraph 'PrintSalaryReport':
Listing18-1.cbl:153: error: 'DetailLine' is not defined
我认为报告的第一个错误可能是真正的问题,其他错误是连锁反应。这是完整的程序清单:
IDENTIFICATION DIVISION.
PROGRAM-ID. Listing18-1.
AUTHOR. Michael Coughlan.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT SalesFile ASSIGN TO "Listing18-1-Sales.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT PrintFile ASSIGN TO "Listing18-1.Rpt".
DATA DIVISION.
FILE SECTION.
FD SalesFile.
01 SalesRecord.
88 EndOfFile VALUE HIGH-VALUES.
02 StateNum PIC 99.
02 SalesAgentNum PIC 999.
02 ValueOfSale PIC 9(5)V99.
FD PrintFile
REPORT IS SolaceSalesReport.
WORKING-STORAGE SECTION.
01 StateNameTable.
02 StateNameValues.
03 FILLER PIC X(14) VALUE "Alabama".
03 FILLER PIC X(14) VALUE "Alaska".
03 FILLER PIC X(14) VALUE "Arizona".
03 FILLER PIC X(14) VALUE "Arkansas".
03 FILLER PIC X(14) VALUE "California".
03 FILLER PIC X(14) VALUE "Colorado".
03 FILLER PIC X(14) VALUE "Connecticut".
03 FILLER PIC X(14) VALUE "Delaware".
03 FILLER PIC X(14) VALUE "Florida".
03 FILLER PIC X(14) VALUE "Georgia".
03 FILLER PIC X(14) VALUE "Hawaii".
03 FILLER PIC X(14) VALUE "Idaho".
03 FILLER PIC X(14) VALUE "Illinois".
03 FILLER PIC X(14) VALUE "Indiana".
03 FILLER PIC X(14) VALUE "Iowa".
03 FILLER PIC X(14) VALUE "Kansas".
03 FILLER PIC X(14) VALUE "Kentucky".
03 FILLER PIC X(14) VALUE "Louisiana".
03 FILLER PIC X(14) VALUE "Maine".
03 FILLER PIC X(14) VALUE "Maryland".
03 FILLER PIC X(14) VALUE "Massachusetts".
03 FILLER PIC X(14) VALUE "Michigan".
03 FILLER PIC X(14) VALUE "Minnesota".
03 FILLER PIC X(14) VALUE "Mississippi".
03 FILLER PIC X(14) VALUE "Missouri".
03 FILLER PIC X(14) VALUE "Montana".
03 FILLER PIC X(14) VALUE "Nebraska".
03 FILLER PIC X(14) VALUE "Nevada".
03 FILLER PIC X(14) VALUE "New Hampshire".
03 FILLER PIC X(14) VALUE "New Jersey".
03 FILLER PIC X(14) VALUE "New Mexico".
03 FILLER PIC X(14) VALUE "New York".
03 FILLER PIC X(14) VALUE "North Carolina".
03 FILLER PIC X(14) VALUE "North Dakota".
03 FILLER PIC X(14) VALUE "Ohio".
03 FILLER PIC X(14) VALUE "Oklahoma".
03 FILLER PIC X(14) VALUE "Oregon".
03 FILLER PIC X(14) VALUE "Pennsylvania".
03 FILLER PIC X(14) VALUE "Rhode Island".
03 FILLER PIC X(14) VALUE "South Carolina".
03 FILLER PIC X(14) VALUE "South Dakota".
03 FILLER PIC X(14) VALUE "Tennessee".
03 FILLER PIC X(14) VALUE "Texas".
03 FILLER PIC X(14) VALUE "Utah".
03 FILLER PIC X(14) VALUE "Vermont".
03 FILLER PIC X(14) VALUE "Virginia".
03 FILLER PIC X(14) VALUE "Washington".
03 FILLER PIC X(14) VALUE "West Virginia".
03 FILLER PIC X(14) VALUE "Wisconsin".
03 FILLER PIC X(14) VALUE "Wyoming".
02 FILLER REDEFINES StateNameValues.
03 State OCCURS 50 TIMES.
04 StateName PIC X(14).
REPORT SECTION.
RD SolaceSalesReport
CONTROLS ARE StateNum
SalesAgentNum
PAGE LIMIT IS 54
FIRST DETAIL 3
LAST DETAIL 46
FOOTING 48.
01 TYPE IS REPORT HEADING NEXT GROUP PLUS 1.
02 LINE 1.
03 COLUMN 20 PIC X(32) VALUE "Solace Solar Solutions".
02 LINE 2.
03 COLUMN 6 PIC X(52) VALUE "Sales Agent - Sales and Salary Report Monthly Report".
01 TYPE IS PAGE HEADING.
02 LINE IS PLUS 1.
03 COLUMN 2 PIC X(5) VALUE "State".
03 COLUMN 16 PIC X(5) VALUE "Agent".
03 COLUMN 32 PIC X(8) VALUE "Value".
02 LINE IS PLUS 1.
03 COLUMN 2 PIC X(4) VALUE "Name".
03 COLUMN 16 PIC X(6) VALUE "Number".
03 COLUMN 31 PIC X(8) VALUE "Of Sales".
01 DetailLine TYPE IS DETAIL.
02 LINE IS PLUS 1.
03 COLUMN 1 PIC X(14) SOURCE StateName(StateNum).
03 COLUMN 17 PIC ZZ9 SOURCE SalesAgentNum.
03 COLUMN 30 PIC $$$,$$$.99 SOURCE ValueOfSale.
01 SalesAgentGrp
TYPE IS CONTROL FOOTING SalesAgentNum NEXT GROUP PLUS 2.
02 LINE IS PLUS 1.
03 COLUMN 15 PIC X(21) VALUE "Sales for sales agent".
03 COLUMN 37 PIC ZZ9 SOURCE SalesAgentNum.
03 COLUMN 43 PIC X VALUE "=".
03 TotalAgentSales COLUMN 45 PIC $$$$$,$$$.99 SUM ValueOfSale.
01 StateGrp TYPE IS CONTROL FOOTING StateNum NEXT GROUP PLUS 2.
02 LINE IS PLUS 1.
03 COLUMN 1 PIC X(58) VALUE ALL "-".
01 TYPE IS PAGE FOOTING.
02 LINE IS 49.
03 COLUMN 1 PIC X(29) VALUE "Programmer - Michael Coughlan".
03 COLUMN 55 PIC X(6) VALUE "Page :".
03 COLUMN 62 PIC ZZ9 SOURCE PAGE-COUNTER.
PROCEDURE DIVISION.
Begin.
OPEN INPUT SalesFile
OPEN OUTPUT PrintFile
READ SalesFile
AT END SET EndOfFile TO TRUE
END-READ
INITIATE SolaceSalesReport
PERFORM PrintSalaryReport UNTIL EndOfFile
TERMINATE SolaceSalesReport
CLOSE SalesFile, PrintFile
STOP RUN.
PrintSalaryReport.
GENERATE DetailLine
READ SalesFile
AT END SET EndOfFile TO TRUE
END-READ.
我在 3 台不同的机器上遇到了同样的问题:运行 Mint Cinnamon 的 64 位台式机、运行 Ubuntu 的 64 位笔记本电脑和运行 Lubuntu 的旧 32 位上网本。
解决方案
我认为报告的第一个错误可能是真正的问题,其他错误是连锁反应。
是的,情况正是如此。
GnuCOBOL 3.0-rc-1 不支持LINE IS PLUS
- 调整LINE PLUS
或更新为可发布的 3.1版本。
要查询 GnuCOBOL 的当前版本,请使用cobc --version
(或短的cobc -V
<-大写)。
推荐阅读
- android - bash:apktool:找不到命令
- java - @RequestMapping 无法解析为类型 - 仅适用于 @Controller 而不适用于 @RestController
- hbase - 从 HBase shell 中所有行的单个列中删除 HBase 值
- flutter - 如何将 TimeOfDay 转换为 int/num 以便我可以从中减去另一个数字?
- r - R中字符向量的hexdump?
- java - 如何使用 Java 在 cassandra 中实现批处理
- react-native - ListItem 的最后一个元素不可点击
- azure-devops - Azure Release Pipelines - 是否可以阻止手动触发阶段,直到另一个阶段完成
- c# - 为什么 Windows 10 认为我的 WPF 应用程序是游戏?
- python - openslide_python-1.1.1-cp36-cp36m-win_amd64.whl 不是该平台支持的滚轮