Ion*_*zău 14 cobol pipe gnucobol
是否可以在不提供输入文件的情况下执行COBOL代码?我正在使用cobc.
我试图将代码传递给cobc进程:
$ cat my-input.cbl | cobc
cobc: No input files
Run Code Online (Sandbox Code Playgroud)
要编译文件并运行它,我会这样做:
cobc -x di.cbl -o a && ./a
Run Code Online (Sandbox Code Playgroud)
假设我没有文件,我只有代码(可能在变量中,作为字符串),我可以传递给它cobc吗?它会比创建文件然后编译并运行它更好.
在我的例子中,用户输入COBOL程序的源代码,这是一个字符串变量.目前,我将代码保存在一个文件中,我编译它然后执行它.如果cobc支持在stdin中管道代码片段甚至cli选项,并生成二进制文件甚至直接显示结果(不确定这是好还是坏),那将是很好的.例如,node有-p选项:node -p'console.log(1)' - 这将输出1 \nundefined.g ++有这个功能 -
昨天不可能,但今天是这样,一旦领导批准变更,我将立即对源树进行更改.
对编译器源的两个小改动 - 可用于指示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
Run Code Online (Sandbox Code Playgroud)
这将适用于任何操作系统,而不仅仅是那些支持/ 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.
Run Code Online (Sandbox Code Playgroud)
同
prompt$ chmod +x interp.cob
prompt$ ./interp.cob
Run Code Online (Sandbox Code Playgroud)
给
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
Run Code Online (Sandbox Code Playgroud)
可悲的是,这只是为了构建.执行需要额外的步骤.
prompt$ ./interp
scripted
Run Code Online (Sandbox Code Playgroud)
"现在运行代码"没有编译器选项,因此将添加-J(固定格式)和-j(自由格式)选项.运行作业,成为-x(创建可执行文件)的新形式,但也将在处理结束时执行二进制文件.然后我们将在POSIX中访问cobc"脚本".目前允许的只是构建,并且运行必须是单独的命令.
并且POSIX hashbang行的固有限制仅限于单个参数,因此-j -free不起作用,也不会-j -Xref等,但在限制范围内,它将允许cobc脚本.
这是对编译器的另一行更改,以及400行选项解析和文档.;-)
应该准备好在几个小时内进行测试.同样,这些更改将需要所有其他编译器维护人员的批准,但我认为没有任何理由不允许改进.两个提交,一个用于 - 作为stdin,而-J -j用于在编译结束时运行作业.