OpenCOBOL
Реализация языка программирования COBOLOpenCOBOL — компилятор COBOL. Написан на C; транслирует код на COBOL в код на C и затем компилирует транслированный код. Реализует существенную часть стандарта COBOL 85 и COBOL 2002, но не утверждает полную с ними совместимость. Распространяется под лицензией GNU GPL (библиотеки — GNU LGPL).
Ссылки:
Примеры:
Hello, World!:
Пример для версий OpenCOBOL 1.0, TinyCOBOL 0.65.9 IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY 'Hello, World!'
STOP RUN.
Факториал:
Пример для версий OpenCOBOL 1.0, TinyCOBOL 0.65.9Используется итеративное определение факториала.
Тип переменной, в которой хранится значение факториала — 9(15)
, т.е. число из 15 знаков. Числа, указанные перед именами переменных, — номера уровней; в более сложных программах они позволяют определять переменные как коллекции других переменных, но в данном случае это не используется. Уровень 77 — специальный; переменные этого уровня соответствуют обычным локальным переменным и не могут входить в сложные составные структуры.
Команда MULTIPLY
, вопреки интуитивному предположению, умножает первый аргумент на второй и помещает результат во второй аргумент. Команда DISPLAY
добавляет перевод строки после аргумента, поэтому элементы вывода приходится приводить к строчному типу (методом сохранения их в строковые переменные соответствующего размера) и конкатенировать. Для умножения добавлена обработка возможного переполнения, хотя это необязательно.
Вывод программы зависит от компилятора: числа всегда выводятся фиксированной ширины (дополненные нулями спереди), в TinyCOBOL — ширины 18, в OpenCOBOL — 15.
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 fact pic 9(15) comp.
77 n pic 99.
77 i pic 99.
77 ist pic XX.
77 factst pic X(18).
PROCEDURE DIVISION.
move 16 to n
move 0 to i
move 1 to fact
perform until i greater than n
move i to ist
move fact to factst
display ist "! = " factst
add 1 to i
multiply i by fact
on size error display "value too big"
end-multiply
end-perform.
stop run.
Числа Фибоначчи:
Пример для версий OpenCOBOL 1.0, TinyCOBOL 0.65.9Используется итеративное вычисление чисел Фибоначчи. Сложение чисел Фибоначчи выполняется командой ADD
, которая суммирует два аргумента и сохраняет результат в третий. Из-за того, что команда DISPLAY
делает перевод строки после каждого вызова, найденные числа приходится сохранять в строку-результат, которая выводится уже после цикла. Для конкатенации нового числа с предыдущими используется команда STRING
; для каждой переменной из тех, которые объединяются в строку, указывается опция DELIMITED BY
: SIZE
— используется вся переменная, SPACE
— часть переменной до первого пробела. Из-за этого числа выводятся без пробелов после запятых:
001,001,002,003,005,008,013,021,034,055,089,144,233,377,610,987,...
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 fib1 pic 999.
77 fib2 pic 999.
77 fib3 pic 999.
77 i pic 99.
77 fibst pic XXX.
77 res pic X(64).
PROCEDURE DIVISION.
move 0 to i
move 0 to fib1
move 1 to fib2
move "" to res
perform until i greater than 15
add fib1 to fib2 giving fib3
move fib2 to fib1
move fib3 to fib2
move fib1 to fibst
string res DELIMITED BY SPACE
fibst DELIMITED BY SIZE
"," DELIMITED BY SIZE into res
add 1 to i
end-perform.
display res "..."
stop run.
Комментарии
]]>blog comments powered by Disqus
]]>