昨天不可能,但今天是这样,一旦领导批准更改,我就会将更改放入源代码树。
编译器源代码的两个小改动和 - 可用于指示标准输入。
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 的一种新形式(创建可执行文件),但也会在处理结束时执行二进制文件。然后我们将可以访问 POSIX 中的 cobc “脚本”。目前只允许构建,并且运行必须是单独的命令。
POSIX hashbang 行的固有限制仅限于单个参数,因此 -j -free 不起作用, -j -Xref 等也不起作用,但在限制范围内,它将允许使用 cobc 脚本。
这是对编译器的另一行更改,以及 400 行选项解析和文档。;-)
应该在几个小时内准备好进行测试。同样,这些更改将需要所有其他编译器维护者的批准,但我看不出有任何理由不允许这些改进。两次提交,一次用于 - 作为标准输入,-J -j 用于在编译结束时运行作业。