feat: add COBOL statement benchmark plan and 34 P0 sample programs

- docs/cobol-statement-benchmark-plan.md — full coverage matrix and gap analysis
- 34 P0 COBOL samples: arithmetic(9), move(5), file(6), control(6),
  inspect(3), search(2), perform(3)
- test-data/validate_statements.py — automatic validation script
- Validation: 34/34 samples pass preprocess + extract_structure
This commit is contained in:
NB-076
2026-06-21 12:02:25 +08:00
parent a6c454692a
commit 8c1f9114f6
36 changed files with 1626 additions and 0 deletions
@@ -0,0 +1,17 @@
* ==== TYPE: ST-CALL-CONTENT ====
* FEATURE: CALL ... BY CONTENT
* STATEMENT: CALL BY CONTENT
* BRANCHES: 2, DECISIONS: 1
IDENTIFICATION DIVISION.
PROGRAM-ID. CALLCN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-PARAM PIC 9(5) VALUE 100.
PROCEDURE DIVISION.
MAIN.
CALL 'SUBPGM' USING BY CONTENT WS-PARAM.
IF WS-PARAM = 100
DISPLAY 'OK: BY CONTENT'
ELSE
DISPLAY 'ERROR: BY CONTENT'.
STOP RUN.
@@ -0,0 +1,20 @@
* ==== TYPE: ST-CALL-VALUE ====
* FEATURE: CALL ... BY VALUE with mixed mechanisms
* STATEMENT: CALL BY VALUE
* BRANCHES: 2, DECISIONS: 1
IDENTIFICATION DIVISION.
PROGRAM-ID. CALLVL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9(5) VALUE 10.
01 WS-B PIC 9(5) VALUE 20.
PROCEDURE DIVISION.
MAIN.
CALL 'SUBPGM' USING
BY VALUE WS-A
BY REFERENCE WS-B.
IF WS-A = 10
DISPLAY 'OK: BY VALUE'
ELSE
DISPLAY 'ERROR: BY VALUE'.
STOP RUN.
@@ -0,0 +1,22 @@
* ==== TYPE: ST-EVAL-ALSO ====
* FEATURE: EVALUATE ALSO (multiple subjects)
* STATEMENT: EVALUATE ALSO
* BRANCHES: 4, DECISIONS: 1
IDENTIFICATION DIVISION.
PROGRAM-ID. EVLALS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-STATUS PIC X(1) VALUE 'A'.
01 WS-TYPE PIC X(1) VALUE 'X'.
PROCEDURE DIVISION.
MAIN.
EVALUATE WS-STATUS ALSO WS-TYPE
WHEN 'A' ALSO 'X'
DISPLAY 'OK: A-X'
WHEN 'A' ALSO 'Y'
DISPLAY 'A-Y'
WHEN 'B' ALSO ANY
DISPLAY 'B-ANY'
WHEN OTHER
DISPLAY 'OTHER'.
STOP RUN.
@@ -0,0 +1,25 @@
* ==== TYPE: ST-GOTO-DEPENDING ====
* FEATURE: GO TO ... DEPENDING ON
* STATEMENT: GO TO DEPENDING ON
* BRANCHES: 0, DECISIONS: 1
* NOTE: GO TO DEPENDING ON is parsed as pass-through (no IF branches)
IDENTIFICATION DIVISION.
PROGRAM-ID. GTODEP.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-SEL PIC 9(1) VALUE 2.
PROCEDURE DIVISION.
MAIN.
GO TO PARA-1 PARA-2 PARA-3
DEPENDING ON WS-SEL.
DISPLAY 'FALL THROUGH'.
STOP RUN.
PARA-1.
DISPLAY 'PARA-1'.
STOP RUN.
PARA-2.
DISPLAY 'PARA-2'.
STOP RUN.
PARA-3.
DISPLAY 'PARA-3'.
STOP RUN.
@@ -0,0 +1,22 @@
* ==== TYPE: ST-IF-COMP ====
* FEATURE: IF with compound conditions (AND / OR)
* STATEMENT: IF (compound)
* BRANCHES: 4, DECISIONS: 2
IDENTIFICATION DIVISION.
PROGRAM-ID. IFCOMP.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-A PIC 9(5) VALUE 100.
01 WS-B PIC 9(5) VALUE 200.
01 WS-C PIC 9(5) VALUE 10.
PROCEDURE DIVISION.
MAIN.
IF WS-A > 50 AND WS-B > 100
DISPLAY 'OK: AND CONDITION'
ELSE
DISPLAY 'ERROR: AND'.
IF WS-A = 100 OR WS-C = 99
DISPLAY 'OK: OR CONDITION'
ELSE
DISPLAY 'ERROR: OR'.
STOP RUN.
@@ -0,0 +1,24 @@
* ==== TYPE: ST-IF-DEEP ====
* FEATURE: IF nested 3+ levels deep
* STATEMENT: IF (nested)
* BRANCHES: 6, DECISIONS: 3
IDENTIFICATION DIVISION.
PROGRAM-ID. IFDEEP.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-X PIC 9(1) VALUE 1.
01 WS-Y PIC 9(1) VALUE 2.
01 WS-Z PIC 9(1) VALUE 3.
PROCEDURE DIVISION.
MAIN.
IF WS-X = 1
IF WS-Y = 2
IF WS-Z = 3
DISPLAY 'OK: NESTED'
ELSE
DISPLAY 'ERR: Z'
ELSE
DISPLAY 'ERR: Y'
ELSE
DISPLAY 'ERR: X'.
STOP RUN.