LANGUAGE ENGINES · REFERENCE

Every language we have an engine for—and exactly how far the coverage goes on each.

Each legacy language has its own history and its own peculiarities. This page lists every language we have an engine for — the legacy sources we migrate, the databases under them, the targets we write into, and two engines that are not about migration at all — with what we have already built for each one and where the coverage stops. We would rather you find the limits here than halfway through a project.

We are language engineering experts, and we have never found a language we could not handle. Real-life experience with actual production projects still matters, though: our knowledge means we have already met the most common problems and we recognize the typical program patterns before they surprise anyone.

How to read this page

Every language below carries one of the first two labels, and some entries qualify a particular dialect or version with the third. They describe the evidence behind the coverage, not our enthusiasm for the language.

LANGUAGE ENGINEWe have a production parser of our own for this language: a maintained product with a regression corpus, not something assembled per project.
PROJECT EXPERIENCEWe have delivered production work on this language and build the tooling for the estate in front of us.

IBM i (AS/400, iSeries)

FOUR LANGUAGES · THE PLATFORM WE KNOW BEST

An IBM i application is never one language. The business logic is RPG, the file and screen definitions are DDS, the orchestration is CL, and the data access is DB2 SQL. A migration that covers only the first one does not cover the system.

01LANGUAGE ENGINE

RPG

We have worked on many projects involving IBM RPG IV, including codebases still under active development, in both free-format and traditional fixed-format code. Our RPG Language Engine is battle-tested on more than 30 million lines of production RPG. See our RPG modernization service.

COVERED RPG IV (RPGLE) fixed and free form; SQLRPGLECOVERED RPG IIINOT SUPPORTED RPG II — on the roadmap, talk to us
02LANGUAGE ENGINE

DDS

Data Description Specifications define the physical and logical files, the display screens and the printer output an RPG application depends on. They are parsed by the same engine and the same data model as RPG, which is what lets us follow a field from the screen to the file it lands in.

COVERED Physical and logical files, display files, printer filesFILE TYPES dds, pf, lf, dspf, prtf
03LANGUAGE ENGINE

CL

CL (Control Language) scripts manage the IBM i platform and launch the RPG programs. We have helped companies deal with the language both in the context of a migration from RPG and simply to change CL programs that nobody left on the team understands.

COVERED 2,160 IBM i CL commands mapped to typed syntax-tree nodes
04PROJECT EXPERIENCE

DB2 SQL

DB2 SQL is used on IBM platforms, embedded in RPG or COBOL programs. Working on projects using those languages has let us help companies move off DB2 and onto other databases, such as Oracle DB or PostgreSQL.

COVERED Embedded and standalone DB2 SQL, as met in migration projectsTYPICAL TARGETS Oracle DB, PostgreSQL

Mainframe, data and desktop estates

FOUR LANGUAGES

Outside IBM i the same rule applies: we tell you which dialect we have measured, and which one we would have to look at first.

05LANGUAGE ENGINE

COBOL

This venerable language has many variants. Our COBOL Language Engine models COBOL 85 at the core—the standard the IBM and mainframe dialects build on—and is validated against the NIST COBOL-85 suite, with selected extensions on top. Which dialect your estate is really written in is one of the first things a Blueprint settles.

COVERED COBOL 85 core; ACU COBOLPARTIAL Micro Focus RM COBOL and Visual COBOLASK US ILE COBOL and mainframe dialects — we measure coverage on your code first
06LANGUAGE ENGINE

SAS

SAS is more than a language: it is a whole system that handles the entire data journey, from storage to analysis. We have worked on many, many legacy projects using SAS, and the parser behind that work is a maintained product of ours rather than a one-off.

COVERED The DATA step with 28 statement kinds; 23 PROC steps, PROC SQL in depthMACROS Recognized and parsed, not expanded — a parser that expanded them would have to be a full interpreter
07PROJECT EXPERIENCE

EGL

A higher-level universal language designed for application development. EGL is typically translated to COBOL or Java before it runs, which means a migration has to decide whether to follow the generated code or the EGL source—and those are two different projects.

COVERED EGL source, in production migration projects
08PROJECT EXPERIENCE

VBA / VB6

We have worked with Visual Basic 6 and Visual Basic for Applications, including the custom platforms companies built on top of them—the spreadsheet that quietly became a production system is a case we have seen more than once.

COVERED Visual Basic 6; VBA, including host-application code

Database and query languages

FOUR LANGUAGES

Databases carry as much business logic as the programs do, and a migration that moves the code but not the stored procedures has not moved much. These are engines in their own right, not a SQL mode bolted onto another parser.

09LANGUAGE ENGINE

Oracle PL/SQL

Package bodies, the SQL embedded in them, and the SQL*Plus script wrapped around both, read by one grammar. It also writes PL/SQL back out, which is what makes round-trip refactoring possible.

COVERED 9,634 lines of grammar, 508 regression fixturesALSO EMF metamodel, code generator
10LANGUAGE ENGINE

Microsoft T-SQL

Transact-SQL with a semantic layer on top of the parse: two implementations of one dialect, .NET and JVM, resolving every column against your own schema.

COVERED PIVOT, FOR SYSTEM_TIME, OPTION hintsALSO Symbol resolution against your schema, LionWeb output
11LANGUAGE ENGINE

Teradata SQL

On Teradata the DDL is the physical design, and most tools skip it. This grammar reads the storage clauses that decide how a table actually behaves.

COVERED MULTISET, FALLBACK, DATABLOCKSIZE, PRIMARY INDEX, COMPRESS, QUALIFY, BTEQSIZE 6,336 lines of grammar across four files
12LANGUAGE ENGINE

Firebird

A .NET Standard 2.0 class library, not a JVM library behind a .NET wrapper, targeting Firebird 4.0.

COVERED Queries and table definitions, UPDATE OR INSERT MATCHING, FIRST/SKIP, symbol resolution and typingNOT COVERED PSQL

The target languages, which we also parse

THREE LANGUAGES

These are not legacy sources. They are the languages we write into, and we maintain engines for them for the same reason: generated code has to be read, checked and regenerated, and that needs a parser at both ends of the pipeline.

13LANGUAGE ENGINE

Java

Modeled on the Java Language Specification, for pipelines where Java is not the only language. It reads the target as well as writing it.

COVERED All final syntax through Java 17 — records, sealed types, switch expressionsALSO 103 symbol-resolution tests, code generator, LionWeb
14LANGUAGE ENGINE

Python

A Python engine built to write Python, not only to read it: four fifths of its test suite covers generation, because that is what a migration target is for.

COVERED Python 3, typed AST whose node names mirror CPython’sALSO 79 generation tests, placeholders, LionWeb
15LANGUAGE ENGINE

Kotlin

Built on JetBrains’ own ANTLR grammar — Kotlin is one of very few languages whose vendor publishes one — for codebases that are half Java.

COVERED Kotlin through 1.9, 95 AST nodesALSO LionWeb; the limits are printed on the page

Engines we license outside migration

TWO LANGUAGES

Two engines exist for work that is not a migration at all. They are listed here so the set is complete, not because they belong in a legacy estate.

16LANGUAGE ENGINE

Analytic SQL

A language-services engine for warehouse SQL, and explicitly not a migration parser: a TypeScript library that runs in Node and in the browser, built for editors.

COVERED Snowflake, Databricks, BigQuery, Fabric, PostgreSQLFOR Completion, formatting, symbol resolution, types
17LANGUAGE ENGINE

Accellera PSS

A front end for the Portable Test and Stimulus Standard, Accellera’s language for describing verification intent once and generating tests for many execution contexts.

COVERED PSS 3.2ALSO Typed Starlasu AST, LionWeb, five bindings

Where we move them to

The source language decides how hard the reading is. The target is your decision, and it is your architecture we write into—not a runtime of ours sitting between you and your own code.

TARGET LANGUAGESJava, Python, C#
DATABASESDB2 to Oracle DB or PostgreSQL
SHAPE OF THE OUTPUTIdiomatic code in your target architecture, validated increment by increment against the behavior of the original
FOUNDATIONSStarlasu, our language-engineering libraries, are Apache-2.0 and public: no proprietary intermediate representation holds your migration hostage

Coverage limits, stated plainly

The list above is what we can defend. Here is what we deliberately do not claim, so that nobody plans around it.

RPG IINot supported. It is on the roadmap; if your estate contains RPG II, tell us early rather than late.
RPG IIISupported. RPG III members are adapted line by line into the equivalent RPG IV fixed layout and run through the same pipeline, so RPG III and RPG IV produce identical AST node types and one set of tools works on both.
IBM ILE COBOLNot claimed as supported. Our COBOL core is the COBOL 85 standard that ILE and the mainframe dialects build on; how close your code sits to it is something we measure, not something we assume.
COBOL FREE FORMATNot supported.
ANYTHING NOT LISTEDAbsence from this page means we have not done it yet, not that it cannot be done. Building a parser for a language nobody else supports is the work we do; it just has to be scoped honestly instead of assumed.

This page is maintained as a reference. If a language matters to your decision and you cannot find it here, ask us and we will tell you plainly whether we have done it, whether we would have to build it, or whether you are better served by someone else.

A migration is priced on what we have measured, not on what we hope to find. Which is why this page names its own limits.

Where to go next

Legacy Modernization

The practice these languages belong to: what a legacy system costs you, how we work, and everything else in the practice.

Migration services →

Migration Blueprint

Where the dialect question actually gets answered. We parse the real codebase and map modules, dependencies, dead code and the risky corners before anyone commits.

Start with a Blueprint →

Migration CodeCraft

The delivery: automated translation into your target language, tuned until the output is code your own developers would have written.

See how it is delivered →

RPG & IBM i modernization

Four of the languages above live on IBM i. If that is your platform, this is the page written for it.

RPG modernization →

Ready to move beyond your legacy system?

Let’s work together to create a path forward. Tell us which of these languages you are running and what is pushing you to move, and we will tell you what we would do and what it would cost.

Schedule a meeting

Scroll to Top