Real transpiler output

See what the transpiler produces

Two real examples — one RPG IV, one COBOL — showing actual output from our pipeline. No demos, no approximations. What you see is what runs.

Invoice pricing engine — RPG IV free format

Customer-tier discount logic with packed-decimal arithmetic. Demonstrates DCL-S declarations, SELECT/WHEN branching, and multi-step financial calculations mapped to BigDecimal-correct Java.

100%
Handle rate
0
Quarantined
48
Lines → Java
RPG IV Source
INVOICECALC.RPGLE
**FREE
// Invoice pricing engine
// Tier-based discount + VAT with packed-decimal precision

DCL-S InvQty       PACKED(7:0);
DCL-S UnitPrice    PACKED(9:2);
DCL-S CustTier     CHAR(1);
DCL-S BaseAmount   PACKED(11:2);
DCL-S DiscountRate PACKED(5:4);
DCL-S DiscountAmt  PACKED(11:2);
DCL-S TaxRate      PACKED(5:4) INZ(0.20);
DCL-S TaxAmount    PACKED(11:2);
DCL-S InvoiceTotal PACKED(13:2);
DCL-S StatusMsg    VARCHAR(80);

DCL-PROC CalcInvoice;
  InvQty    = 150;
  UnitPrice = 24.99;
  CustTier  = 'G';

  BaseAmount = InvQty * UnitPrice;

  SELECT;
    WHEN CustTier = 'P';
      DiscountRate = 0.15;
      StatusMsg    = 'Platinum tier — 15% applied';
    WHEN CustTier = 'G';
      DiscountRate = 0.10;
      StatusMsg    = 'Gold tier — 10% applied';
    WHEN CustTier = 'S';
      DiscountRate = 0.05;
      StatusMsg    = 'Silver tier — 5% applied';
    OTHER;
      DiscountRate = 0.00;
      StatusMsg    = 'Standard pricing';
  ENDSL;

  DiscountAmt  = BaseAmount * DiscountRate;
  TaxAmount    = (BaseAmount - DiscountAmt) * TaxRate;
  InvoiceTotal = BaseAmount - DiscountAmt + TaxAmount;

  DSPLY StatusMsg;
  DSPLY ('Base:     ' + %CHAR(BaseAmount));
  DSPLY ('Discount: ' + %CHAR(DiscountAmt));
  DSPLY ('Tax:      ' + %CHAR(TaxAmount));
  DSPLY ('TOTAL:    ' + %CHAR(InvoiceTotal));

  *INLR = *ON;
END-PROC;
Java 21 Output
INVOICECALC.java
// Generated by Language Foundry
package foundry.rpg;
import foundry.rt.*;

public class INVOICECALC {

    static RpgDec invQty       = RpgDec.of("0", 7, 0);
    static RpgDec unitPrice    = RpgDec.of("0", 9, 2);
    static String custTier     = " ";
    static RpgDec baseAmount   = RpgDec.of("0", 11, 2);
    static RpgDec discountRate = RpgDec.of("0", 5, 4);
    static RpgDec discountAmt  = RpgDec.of("0", 11, 2);
    static RpgDec taxRate      = RpgDec.of("0.20", 5, 4);
    static RpgDec taxAmount    = RpgDec.of("0", 11, 2);
    static RpgDec invoiceTotal = RpgDec.of("0", 13, 2);
    static String statusMsg    = "";

    static void CalcInvoice() {
        invQty    = RpgDec.of("150", 7, 0);
        unitPrice = RpgDec.of("24.99", 9, 2);
        custTier  = "G";

        baseAmount = RpgDec.of(
            invQty.big().multiply(unitPrice.big()), 11, 2);

        if (custTier.trim().equals("P")) {
            discountRate = RpgDec.of("0.15", 5, 4);
            statusMsg = "Platinum tier — 15% applied";
        } else if (custTier.trim().equals("G")) {
            discountRate = RpgDec.of("0.10", 5, 4);
            statusMsg = "Gold tier — 10% applied";
        } else if (custTier.trim().equals("S")) {
            discountRate = RpgDec.of("0.05", 5, 4);
            statusMsg = "Silver tier — 5% applied";
        } else {
            discountRate = RpgDec.of("0.00", 5, 4);
            statusMsg = "Standard pricing";
        }

        discountAmt = RpgDec.of(
            baseAmount.big().multiply(discountRate.big()), 11, 2);
        taxAmount = RpgDec.of(
            baseAmount.big().subtract(discountAmt.big())
                      .multiply(taxRate.big()), 11, 2);
        invoiceTotal = RpgDec.of(
            baseAmount.big().subtract(discountAmt.big())
                      .add(taxAmount.big()), 13, 2);

        RT.dsply(statusMsg);
        RT.dsply("Base:     " + RT.charOf(baseAmount));
        RT.dsply("Discount: " + RT.charOf(discountAmt));
        RT.dsply("Tax:      " + RT.charOf(taxAmount));
        RT.dsply("TOTAL:    " + RT.charOf(invoiceTotal));

        RT.setLR(true);
    }

    public static void main(String[] args) { CalcInvoice(); }
}

Customer risk assessment — IBM mainframe COBOL

Fixed-format COBOL with OCCURS tables, subscripted field access, EVALUATE TRUE, PERFORM VARYING loops, and COMPUTE averages. Verified equivalent to the original by running both against identical inputs.

100%
Handle rate
0
Quarantined
110
Lines → Java
COBOL Source
CUSTRISK.CBL
       IDENTIFICATION DIVISION.
       PROGRAM-ID. CUSTRISK.
       ENVIRONMENT DIVISION.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-COUNTER          PIC 9(3)    VALUE ZEROS.
       01  WS-TOTAL-RISK       PIC 9(5)V99 VALUE ZEROS.
       01  WS-AVG-RISK         PIC 9(5)V99 VALUE ZEROS.
       01  WS-CUST-COUNT       PIC 9(3)    VALUE ZEROS.

       01  CUST-TABLE.
           05  CUST-ENTRY OCCURS 3 TIMES.
               10  T-CUST-ID      PIC 9(4).
               10  T-CUST-NAME    PIC X(20).
               10  T-CUST-STATUS  PIC X(1).
               10  T-CUST-SEGMENT PIC X(1).
               10  T-CUST-RISK    PIC 9(3)V99.

       01  COUNTRY-TABLE.
           05  COUNTRY-ENTRY OCCURS 2 TIMES.
               10  T-COUNTRY-CODE PIC X(2).
               10  T-COUNTRY-NAME PIC X(15).
               10  T-COUNTRY-RISK PIC 9(3).

       PROCEDURE DIVISION.
       0000-MAIN.
           PERFORM 1000-INIT
           PERFORM 2000-PROCESS
           PERFORM 3000-REPORT
           STOP RUN.

       1000-INIT.
           MOVE 1              TO T-CUST-ID(1)
           MOVE 'ALICE SMITH   ' TO T-CUST-NAME(1)
           MOVE 'A'            TO T-CUST-STATUS(1)
           MOVE 'R'            TO T-CUST-SEGMENT(1)
           MOVE 050.50         TO T-CUST-RISK(1)
           MOVE 2              TO T-CUST-ID(2)
           MOVE 'BOB JONES     ' TO T-CUST-NAME(2)
           MOVE 'S'            TO T-CUST-STATUS(2)
           MOVE 'C'            TO T-CUST-SEGMENT(2)
           MOVE 120.75         TO T-CUST-RISK(2)
           MOVE 3              TO T-CUST-ID(3)
           MOVE 'CAROL WHITE   ' TO T-CUST-NAME(3)
           MOVE 'I'            TO T-CUST-STATUS(3)
           MOVE 'P'            TO T-CUST-SEGMENT(3)
           MOVE 200.00         TO T-CUST-RISK(3)
           MOVE 'US'           TO T-COUNTRY-CODE(1)
           MOVE 10             TO T-COUNTRY-RISK(1)
           MOVE 'GB'           TO T-COUNTRY-CODE(2)
           MOVE 20             TO T-COUNTRY-RISK(2).

       2000-PROCESS.
           PERFORM VARYING WS-COUNTER FROM 1 BY 1
               UNTIL WS-COUNTER > 3
               PERFORM 2100-EVAL-CUST
           END-PERFORM.

       2100-EVAL-CUST.
           IF T-CUST-STATUS(WS-COUNTER) = 'A'
               DISPLAY 'Customer ' T-CUST-ID(WS-COUNTER) ' ACTIVE'
           ELSE
               IF T-CUST-STATUS(WS-COUNTER) = 'S'
                   DISPLAY 'Customer ' T-CUST-ID(WS-COUNTER) ' SUSPENDED'
               ELSE
                   DISPLAY 'Customer ' T-CUST-ID(WS-COUNTER) ' INACTIVE'
               END-IF
           END-IF
           EVALUATE T-CUST-SEGMENT(WS-COUNTER)
               WHEN 'R'  DISPLAY 'Segment: Retail'
               WHEN 'C'  DISPLAY 'Segment: Corporate'
               WHEN 'P'  DISPLAY 'Segment: Private'
               WHEN OTHER DISPLAY 'Segment: Unknown'
           END-EVALUATE
           ADD T-CUST-RISK(WS-COUNTER) TO WS-TOTAL-RISK
           ADD 1 TO WS-CUST-COUNT.

       3000-REPORT.
           IF WS-CUST-COUNT > 0
               COMPUTE WS-AVG-RISK = WS-TOTAL-RISK / WS-CUST-COUNT
           END-IF
           DISPLAY 'Total customers: ' WS-CUST-COUNT
           DISPLAY 'Total risk:      ' WS-TOTAL-RISK
           DISPLAY 'Average risk:    ' WS-AVG-RISK
           PERFORM VARYING WS-COUNTER FROM 1 BY 1
               UNTIL WS-COUNTER > 2
               DISPLAY 'Country ' T-COUNTRY-CODE(WS-COUNTER)
                       ' risk=' T-COUNTRY-RISK(WS-COUNTER)
           END-PERFORM.
Java 21 Output
Custrisk.java
// Generated by Language Foundry
package foundry.cobol;
import foundry.rt.*;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class Custrisk {

    // --- Working Storage ---
    static long     WS_COUNTER    = 0L;
    static CobolDec WS_TOTAL_RISK = CobolDec.of(7, 2);
    static CobolDec WS_AVG_RISK   = CobolDec.of(7, 2);
    static long     WS_CUST_COUNT = 0L;

    static long[]     T_CUST_ID;
    static String[]   T_CUST_NAME;
    static String[]   T_CUST_STATUS;
    static String[]   T_CUST_SEGMENT;
    static CobolDec[] T_CUST_RISK;
    static String[]   T_COUNTRY_CODE;
    static String[]   T_COUNTRY_NAME;
    static long[]     T_COUNTRY_RISK;

    static {
        T_CUST_ID     = new long[3];
        T_CUST_NAME   = new String[3];
        java.util.Arrays.fill(T_CUST_NAME, "                    ");
        T_CUST_STATUS  = new String[3];
        java.util.Arrays.fill(T_CUST_STATUS, " ");
        T_CUST_SEGMENT = new String[3];
        java.util.Arrays.fill(T_CUST_SEGMENT, " ");
        T_CUST_RISK = new CobolDec[3];
        for (int i = 0; i < 3; i++) T_CUST_RISK[i] = CobolDec.of(5, 2);
        T_COUNTRY_CODE = new String[2];
        java.util.Arrays.fill(T_COUNTRY_CODE, "  ");
        T_COUNTRY_NAME = new String[2];
        java.util.Arrays.fill(T_COUNTRY_NAME, "               ");
        T_COUNTRY_RISK = new long[2];
    }

    public static void main(String[] args) { run(); }
    public static void run() { __0000_main(); }

    static void __0000_main() {
        __1000_init();
        __2000_process();
        __3000_report();
    }

    static void __1000_init() {
        T_CUST_ID[0]      = 1L;
        T_CUST_NAME[0]    = RT.padEnd("ALICE SMITH", 20);
        T_CUST_STATUS[0]  = "A";
        T_CUST_SEGMENT[0] = "R";
        T_CUST_RISK[0]    = CobolDec.of("050.50", 5, 2);
        T_CUST_ID[1]      = 2L;
        T_CUST_NAME[1]    = RT.padEnd("BOB JONES", 20);
        T_CUST_STATUS[1]  = "S";
        T_CUST_SEGMENT[1] = "C";
        T_CUST_RISK[1]    = CobolDec.of("120.75", 5, 2);
        T_CUST_ID[2]      = 3L;
        T_CUST_NAME[2]    = RT.padEnd("CAROL WHITE", 20);
        T_CUST_STATUS[2]  = "I";
        T_CUST_SEGMENT[2] = "P";
        T_CUST_RISK[2]    = CobolDec.of("200.00", 5, 2);
        T_COUNTRY_CODE[0] = "US";
        T_COUNTRY_RISK[0] = 10L;
        T_COUNTRY_CODE[1] = "GB";
        T_COUNTRY_RISK[1] = 20L;
    }

    static void __2000_process() {
        WS_COUNTER = 1L;
        while (!(WS_COUNTER > 3L)) {
            __2100_eval_cust();
            WS_COUNTER += 1L;
        }
    }

    static void __2100_eval_cust() {
        int idx = (int) WS_COUNTER - 1;
        if (RT.trim(T_CUST_STATUS[idx]).equals("A")) {
            RT.dsply("Customer " + T_CUST_ID[idx] + " ACTIVE");
        } else if (RT.trim(T_CUST_STATUS[idx]).equals("S")) {
            RT.dsply("Customer " + T_CUST_ID[idx] + " SUSPENDED");
        } else {
            RT.dsply("Customer " + T_CUST_ID[idx] + " INACTIVE");
        }
        if      (RT.trim(T_CUST_SEGMENT[idx]).equals("R"))
            RT.dsply("Segment: Retail");
        else if (RT.trim(T_CUST_SEGMENT[idx]).equals("C"))
            RT.dsply("Segment: Corporate");
        else if (RT.trim(T_CUST_SEGMENT[idx]).equals("P"))
            RT.dsply("Segment: Private");
        else
            RT.dsply("Segment: Unknown");

        WS_TOTAL_RISK = CobolDec.of(
            CobolDec.add(WS_TOTAL_RISK.big(),
                         T_CUST_RISK[idx].big()), 7, 2);
        WS_CUST_COUNT++;
    }

    static void __3000_report() {
        if (WS_CUST_COUNT > 0L) {
            WS_AVG_RISK = CobolDec.of(
                CobolDec.div(WS_TOTAL_RISK.big(),
                    new BigDecimal(WS_CUST_COUNT), 6), 7, 2);
        }
        RT.dsply("Total customers: " + WS_CUST_COUNT);
        RT.dsply("Total risk:      " + WS_TOTAL_RISK.str());
        RT.dsply("Average risk:    " + WS_AVG_RISK.str());
        WS_COUNTER = 1L;
        while (!(WS_COUNTER > 2L)) {
            RT.dsply("Country " + T_COUNTRY_CODE[(int)WS_COUNTER - 1]
                + " risk=" + T_COUNTRY_RISK[(int)WS_COUNTER - 1]);
            WS_COUNTER += 1L;
        }
    }
}

Want to see this on your codebase?

We run the full pipeline — Scout, Analyst, Builder, Validator — against your actual source files and deliver a handle-rate report and sample output.

Request a Demo How the Pipeline Works