рдЕрднрд┐рд╡рд╛рджрди, рдкреНрд░рд┐рдп рдорд┐рддреНрд░реЛрдВред
рд╣рдо рдЕрдкрдиреЗ рдЧреИрд░-рд▓рд╛рднрдХрд╛рд░реА рд╕рдВрдЧрдарди рдХреА (рддреВрдлрд╛рдиреА) рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рд╕рд░рд▓ (рд▓реЙрдЧрд┐рдВрдЧ) рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ: рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред
рдЧреБрд▓реЛрдмрдиреНрдж
рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рд╣рдорд╛рд░реЗ рдореВрд▓ рдирд┐рдЧрдо (рдПрдХ рдмрдбрд╝реА рд╡рд┐рддреНрддреАрдп рддрдХрдиреАрдХ) рдХреЛ рдореЗрдирдлреНрд░реЗрдо рдФрд░ рдХреЛрдмреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдФрд░ рдмрдбрд╝реЗ рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ - рдХрдард┐рдирд╛рдИ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдПрдХреАрдХрд░рдг рдореЗрдВ рдПрдХ рдЧреБрд▓рд╛рдо рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рд╣рдореЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдерд╛ред рдЕрд░реНрдерд╛рддреН - рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдлрд╛рдЗрд▓реЗрдВ "COBOL рдбреЗрдЯрд╛ рдлрд╛рдЗрд▓реЗрдВ"ред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛ (рдФрд░ рд╣рдореЗрдВ рдкрд╣рд▓реЗ COBOL рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдерд╛), рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рдЧреИрд░-рд░реЗрдЦреАрдп рд╕рдВрд░рдЪрдирд╛ рд╣реИ ред рдЕрд░реНрдерд╛рддреН:
- рдПрдХ рдФрд░ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЛ рд╡рд┐рднрд┐рдиреНрди "рд╕рдореВрд╣реЛрдВ" (COBOL рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк) рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдмрд╣реБрд░реВрдкрддрд╛: рдирд┐рд░реНрджреЗрд╢
redefines
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рд╕рдореВрд╣реЛрдВ рдФрд░ рдЙрдирдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рдеред - рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдирд┐рд░реНрджреЗрд╢
occurs
- рдмреНрд▓реЙрдХ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рд╕реЗ рдЧрд┐рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рддрджрдиреБрд╕рд╛рд░, рдЖрдк рдкрд┐рдЫрд▓реЗ рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рдкрдврд╝реЗ рдмрд┐рдирд╛ рдПрдХ рдЕрд▓рдЧ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
, COBOL: "copybook" ( Data Section Division), , :
PIC X(06)V99
PIC 9(06).9999999
PIC 9(07)V9(07) COMP-3
:
- IBM Computational 3
- (EBCDIC, ASCII) тАФ ( )
- (CR, LF, CRLF, LFCR, Newline, N )
- 400
- header, record, trailer
: ?
, . : JRecord 90.
, тАФ , - . , data picture
comp-3
.
, 2 :
, . тАФ тАФ :
, ? тАФ 1 .
- , :
COBOL тАФ Data Section Division
. , COBOL.
, -, COBOL ( Java) тАФ MIT:
https://github.com/uwol/proleap-cobol-parser
, :
Antlr, meta-API Visitor. -.
visit e , Groovy , (data picture clause
):
@Override
@CompileDynamic
Boolean visitDataPictureClause(CobolParser.DataPictureClauseContext ctx) {
PictureClause entry = (PictureClause) program.getASGElementRegistry().getASGElement(ctx)
def (length, comp3length, scale) = calculateLengths(entry.pictureString)
write """ setDataPicture("""
write """ depth: ${currentFrame.depth},"""
write """ pictureString: "${entry.pictureString}","""
write """ length: ${length},"""
write """ comp3length: ${comp3length},"""
write """ scale: ${scale},"""
Boolean result = super.visitDataPictureClause(ctx)
write """ )"""
return result
}
, COBOL Groovy.
, copybook
.
Java , .
Closure Groovy тАФ Closure COBOL.
, COBOL
(copybook):
000010 IDENTIFICATION DIVISION. XXXXXXXX
PROGRAM-ID. UnstringSample. XXXXXXXX
ENVIRONMENT DIVISION. XXXXXXXX
CONFIGURATION SECTION. XXXXXXXX
SPECIAL-NAMES. DECIMAL-POINT IS COMMA. XXXXXXXX
INPUT-OUTPUT SECTION. XXXXXXXX
DATA DIVISION. XXXXXXXX
WORKING-STORAGE SECTION. XXXXXXXX
01 ABCDE-RECORD. XXXXXXXX
XXXXXX 02 ABCDE-REC. XXXXXXXX
03 ABCDE-COMMON. XXXXXXXX
05 ABCDE-DETAILS. XXXXXXXX
10 ABCDE-RECORD-ABC. XXXXXXXX
15 ABCDE-PRI-ABC. XXXXXXXX
20 ABCDE-ABC-AAAAAAAA PIC X(02). XXXXXXXX
20 ABCDE-ABC-ACCT-ABCS. XXXXXXXX
25 ABCDE-ABC-ABC-1 PIC X(02). XXXXXXXX
25 ABCDE-ABC-ABC-2 PIC X(03). XXXXXXXX
25 ABCDE-ABC-ABC-3 PIC X(03). XXXXXXXX
25 ABCDE-ABC-ABC-4 PIC X(04). XXXXXXXX
:
io.infinite.cobol.CobolCompiler|import groovy.transform.CompileStatic
import io.infinite.cobol.CobolRuntime
import io.infinite.cobol.CobolApi
import io.infinite.other.CopybookStructureEnum
@CompileStatic
class CobolClosureRuntime extends CobolRuntime {
@Override
void run(Long totalSize, InputStream inputStream, String charsetName, List<Byte> lineBreakBytes, CobolApi cobolApi, CopybookStructureEnum copybookStructure) {
super.setup(totalSize, inputStream, charsetName, lineBreakBytes, cobolApi, copybookStructure)
readFile() {
createRecord("ABCDE-RECORD") {
createGroup(2, "ABCDE-REC") {
createGroup(3, "ABCDE-COMMON") {
createGroup(4, "ABCDE-DETAILS") {
createGroup(5, "ABCDE-RECORD-ABC") {
createGroup(6, "ABCDE-PRI-ABC") {
createGroup(7, "ABCDE-ABC-AAAAAAAA") {
setDataPicture(
depth: 7,
pictureString: "X(02)",
length: 2,
comp3length: 2,
scale: 0,
)
}//<(end of group: ABCDE-ABC-AAAAAAAA)
createGroup(7, "ABCDE-ABC-ACCT-ABCS") {
createGroup(8, "ABCDE-ABC-ABC-1") {
setDataPicture(
depth: 8,
pictureString: "X(02)",
length: 2,
comp3length: 2,
scale: 0,
)
}//<(end of group: ABCDE-ABC-ABC-1)
createGroup(8, "ABCDE-ABC-ABC-2") {
setDataPicture(
depth: 8,
pictureString: "X(03)",
length: 3,
comp3length: 2,
scale: 0,
)
}//<(end of group: ABCDE-ABC-ABC-2)
createGroup(8, "ABCDE-ABC-ABC-3") {
setDataPicture(
depth: 8,
pictureString: "X(03)",
length: 3,
comp3length: 2,
scale: 0,
)
}//<(end of group: ABCDE-ABC-ABC-3)
createGroup(8, "ABCDE-ABC-ABC-4") {
setDataPicture(
depth: 8,
pictureString: "X(04)",
length: 4,
comp3length: 3,
scale: 0,
)
}//<<<<(end of group: ABCDE-ABC-ABC-4)
}//<<<<(end of group: ABCDE-ABC-ACCT-ABCS)
}//<<<<(end of group: ABCDE-PRI-ABC)
}//<<<<(end of group: ABCDE-RECORD-ABC)
}//<<<<(end of group: ABCDE-DETAILS)
}//<<<<(end of group: ABCDE-COMMON)
}//<<<<(end of group: ABCDE-REC)
}//<<<<(end of group: ABCDE-RECORD)
}//<<<<<
}
}
, Production .
тАФ , . тАФ copybook
тАФ .
.
$.
:
- Open Source COBOL Java (Groovy)
- COBOL (proleap.io)
- COMP-3
- Data Section Division
redefines
occurs
- API, XML ( )
- (EBCDIC, ASCII )
1)
2) тАФ , . .
3) , " ". 2020 .
https://i-t.io , . -, .
.
!
:
https://github.com/INFINITE-TECHNOLOGY/COBOL