Ответ 1
Вчера это было невозможно, но сегодня, и я получаю изменения в исходном дереве, как только руководство одобрит это изменение.
Два небольших изменения источника компилятора и - могут использоваться для указания stdin.
prompt$ echo 'program-id. test. display "hello".' | cobc -free -frelax -x -o thing -
-: 1: Warning: PROCEDURE DIVISION header missing - assumed
prompt$ ls -l
-rwxrwxr-x. 1 btiffin btiffin 13192 Jul 31 17:27 thing
prompt$ ./thing
hello
Затем это будет работать для любой операционной системы, а не только с поддержкой /dev/stdin (которая на данный момент, как пишет paxdiablo, является очень правильной опцией с GNU/Linux и т.п.).
И как в сторону; cobc уже может использоваться как интерпретатор POSIX.
#!/usr/local/bin/cobc -xvg
identification division.
program-id. SAMPLE.
procedure division.
display "scripted" end-display
goback.
end program SAMPLE.
с
prompt$ chmod +x interp.cob
prompt$ ./interp.cob
дающий
Command line: /usr/local/bin/cobc -xvg ./interp.cob
Preprocessing: ./interp.cob -> interp.i
Return status: 0
Parsing: interp.i (./interp.cob)
Return status: 0
Translating: interp.i -> interp.c (./interp.cob)
Executing: gcc -std=gnu99 -c -I/usr/local/include -pipe -Wno-unused
-fsigned-char -Wno-pointer-sign -g -o "/tmp/cob25113_0.o"
"interp.c"
Return status: 0
Executing: gcc -std=gnu99 -Wl,--export-dynamic -o "interp"
"/tmp/cob25113_0.o" -L/usr/local/lib -lcob -lm -lgmp
-lncursesw -ldb -ldl
Return status: 0
К сожалению, это только для сборки. Для выполнения требуется дополнительный шаг.
prompt$ ./interp
scripted
Не существует опции компилятора для "запускать код сейчас", поэтому будет добавлена опция -J (фиксированная форма) и -J (свободная форма). Запустить задание, становится новой формой -x (создать исполняемый файл), но также будет выполнять двоичный код в конце обработки. Тогда у нас будет доступ к скриптам cobc в POSIX. В настоящее время все, что разрешено, это сборка, и запуск должен быть отдельной командой.
И неотъемлемые ограничения, которые ограничивают строки хэш-строки POSIX, ограничиваются одним аргументом, поэтому -J -free не работает, а также -J -x ref и т.д., Но в пределах, это позволит сценарии cobc.
Эта другая строка изменяется на компилятор и 400 строк разбора и документирования параметров. ;-)
Должен быть готов к тестированию через несколько часов. Опять же, эти изменения потребуют одобрения от всех других сопровождающих компилятора, но я не вижу причин для того, чтобы не допустить улучшения. Два коммитов, один для - как stdin, и -J -J для запуска задания в конце компиляции.