科宝
ID DIVISION
DATA DIVISION
01 HELLOWORLDBINARY
05 HE COMP PIC 9999
05 LL COMP PIC 9999
05 OCOMMA COMP PIC 9999
05 SPACEW COMP PIC 9999
05 ORTEXT COMP PIC 9999
05 LD COMP PIC 9999
05 EXCLAMATION COMP PIC 9999
01 FILLER REDEFINES HELLOWORLDBINARY
05 HELLOWORLDTEXT PIC XXXXXXXXXXXXX
05 FILLER PIC X
PROCEDURE DIVISION
MOVE 51333 TO HE
MOVE 37779 TO LL
MOVE 38507 TO OCOMMA
MOVE 16614 TO SPACEW
MOVE 38553 TO ORTEXT
MOVE 37764 TO LD
MOVE 23104 TO EXCLAMATION
DISPLAY HELLOWORLDTEXT
GOBACK
需要进行一些更改才能仅成为真正的字母数字源。
可以删除PROGRAM-ID。您将获得一个生成的程序名称(请参阅消息)。
可以删除WORKING-STORAGE。编译器再次抱怨。
由于这两行以前都缺少句号/句点,而现在由于完全缺少描述而不再相关,因此错误消息的数量与以前相同,并且仍然不影响程序的生成代码。
在将COMP-5更改为COMP时,不再允许使用VALUE子句,因为COMP 9999仅是四个十进制数字,而COMP-5是一个两字节的二进制数,具有所有可用的位值。
MOVE中的值是十进制值,十进制值给出二进制值,二进制值给出字符对。
即使COMP字段有四个数字,并且不允许VALUE子句包含四个以上的数字,但您可以在文字值的MOVE中使用更多的数字,而不会被截断……不要问我为什么。编译器选项DIAGTRUNC(已关闭)将为这些生成警告诊断。
编译器选项TRUNC(BIN)可以将COMP视为COMP-5,但是MOVE是另一种方式。
由于它是COBOL,因此输出必须为大写(一个谎言,但这只是为了好玩)。
HELLO WORLD!
好了,放宽了,现在产生:
Hello, World!
这是一个奇数个字符,需要做一些进一步的更改,因为此编译器无法使用奇数字节的二进制字段。看看那行13 Xs!它通常被写为X(13),但是可以像我展示的那样。
并且需要ORTEXT作为名称(或者,还是不需要OR),因为OR是编译器的保留字(当然,它意味着OR)。
这些是EBCDIC值,而不是ASCII,因为它在支持EBCDIC的Big Endian框上运行。
哦,COBOL需要很多句点/句号。我把它们排除在外(它们被禁止了),所以得到了很多编译信息。只是告诉编译器无论如何都要生成代码(没有消息与目标代码相关)。
即使没有DIAGTRUNC,消息现在也可以达到17 ...
1 IGYDS1003-E A "PROGRAM-ID" paragraph was not found.
Program-name "CBLNAM01" was assumed.
2 IGYDS1082-E A period was required. A period was assumed
before "DATA".
3 IGYDS1082-E A period was required. A period was assumed
before "01".
Same message on line: 11
3 IGYDS1040-E A data item was found in the "DATA DIVISION"
before a section header was encountered.
"WORKING-STORAGE SECTION" was assumed.
4 IGYDS1082-E A period was required. A period was assumed
before "05".
Same message on line: 5 6 7 8
9 10 12 13
14 IGYDS1082-E A period was required. A period was assumed
before "PROCEDURE".
15 IGYPS2145-E A period was required. A period was assumed
before "MOVE".
23 IGYSC1082-E A period was required. A period was assumed
before "END OF PROGRAM".