我想用COBOL在scons中创建一个生成器。
以下是一个开始:
import re
Import('env')
# Source:
# src/cpy/COPYBK1.cpy
# src/cpy/COPYBK2.cpy
# src/cpy/COPYBK3.cpy
# src/bat/PROG1.cbl
# src/bat/PROG2.cbl
# These commands would run:
# cobc -o lib/PROG1.so -Isrc/cpy src/cbl/PROG1.cbl
# cobc -o lib/PROG2.so -Isrc/cpy src/cbl/PROG2.cbl
# +-.
# +-SConstruct
# +-PROG1.cbl
# +-PROG1.so
# | +-PROG1.cbl
# | +-COPYBK1.cpy
# | +-COPYBK2.cpy
# +-PROG2.cbl
# +-PROG2.so
# | +-PROG2.cbl
# | +-COPYBK1.cpy
# | +-COPYBK3.cpy
#
# Also, PROG2 is called from PROG1 so lib/PROG2.so target should be automatically generated.
# PROG2 is dynamically loaded so it does not need to linked into PROG1 target.
"""
def getCalls(fullprogrampath):
# This needs to be modified to support multiple lines.
# This needs to be modified to support nested COPY.
theregex = r'^......]\s*CALL\s*([A-Z0-9]*)\.$'
calllist = []
with open(fullprogrampath, 'r') as f:
linenum = 0
for line in f.readlines():
linenum += 1
line = line.rstrip()
m = re.match(theregex, line, re.I)
if m:
calllist.append(m.group(1))
return(calllist)
"""
def getCopyBooks(fullprogrampath):
# This needs to be modified to support multiple lines.
# This needs to be modified to support nested COPY.
theregex = r'^...... \s*COPY\s*([A-Z0-9]*)\.$'
copybooklist = []
with open(fullprogrampath, 'r') as f:
linenum = 0
for line in f.readlines():
linenum += 1
line = line.rstrip()
m = re.match(theregex, line, re.I)
if m:
copybooklist.append(m.group(1))
return(copybooklist)
bld = Builder(action = 'cobc -o $TARGET -Icpy $SOURCE')
env.Append(BUILDERS = {'CobolProgram': bld})
env.CobolProgram('lib/PROG1.so', 'bat/PROG1.cbl')
env.Depends(target = 'lib/PROG1.so', dependency = getCopyBooks('bat/PROG1.cbl'))
env.CobolProgram('lib/PROG2.so', 'cbl/PROG2.cbl')
env.Depends(target = 'lib/PROG2.so', dependency = getCopyBooks('cbl/PROG2.cbl'))它实际上在运行
以下是需要补充的内容:
中没有类似的说法。
我该怎么做呢?
有什么样例建设者我可以看看,我可以建模吗?
我承认COBOL是很难扫描的,它将仅限于COBOL的格式化有多疯狂。将由COBOL的开发人员为其未检测到的复制簿和调用语句添加Depends调用。
发布于 2021-10-02 22:44:07
在一般情况下,用正则表达式无法可靠地找到COBOL调用的目标。有一些COBOL语法可以用来生成一个解析器来帮助您编写一个应用程序来计算调用和复制,但这是一个非常重要的练习。
想想..。
01 Work-Areas.
05 Program1 PIC X(008) Value Low-Values.
88 Name-Validate Value 'N8675309'.
88 Addr-Validate Value 'A2718281'.
88 Date-Validate Value 'D3141592'.
[...]
Set Addr-Validate To True
Call Program1 Using [...]
Set Date-Validate To True
Call Program1 Using [...]
Move 'X' To Program1(1:1)
Call Program1 Using [...]...and注意到代码甚至不是病态的,就像这样.
Identification Division.
Program-ID. CRAIS.
Data Division.
Working-Storage Section.
01 C
- O
- N
- S
- T
- A
- N
- T
- S.
05 P
- G
- M
P
- I
- C
X
- (
- 8
- )
V
- A
- L
- U
- E
'B
- 'R
- 'A
- 'C
- 'A'
.
Procedure Division.
C
- A
- L
- L
P
- G
- M
G
- O
- B
- A
- C
- K
.COBOL复制语句也可以像上面的讨厌调用那样继续下去。
https://stackoverflow.com/questions/69418646
复制相似问题