КОБОЛ
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
Потрібні деякі зміни, щоб стати справді буквено-цифровим джерелом.
Ідентифікатор програми можна скинути. Ви отримуєте згенеровану назву програми (див. Повідомлення).
РОБОТА-ЗБЕРІГАННЯ можна скинути. Знову компілятор стогне.
Оскільки в обох цих рядках раніше були відсутні повні зупинки / періоди, які вже не є актуальними тепер, коли описи повністю відсутні, кількість повідомлень про помилки є такою ж, як і раніше, і досі не впливає на створений код для програми.
Змінюючи 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 X! Зазвичай він пишеться як X (13), але може бути таким, як я показав ...
І ORTEXT потрібен (чи ні АБО, все одно) як ім'я, оскільки АБО - це зарезервоване слово для компілятора (це означає, АБО, звичайно).
Це значення 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".