A code generator that had to keep producing identical output
The thermal-model environment for spacecraft generated code through a parser tied to a toolchain going out of support. Every generated line had to stay compatible.
More than seventy clients have handed us a specialist engineering problem with no off-the-shelf answer. The European Space Agency and Nasdaq. A Luxembourg ministry and a British clothing manufacturer. Cognizant, and a two-person startup in Barcelona.
The same small team of language engineers, working to the same standard of proof. Most of what we build is invisible — it runs inside other people’s products.
A parser that is ninety-five per cent right is worthless. Either every construct in a language is handled correctly or the tool built on it cannot be trusted.
These problems arrive after something simpler has been tried. Usually there is no product to buy, and the literature stops well before the specific case.
We ship into systems that run payrolls, treatments, factories and pension funds. Several of these collaborations are now in their fifth, sixth or seventh year.
Not a service catalogue — the engineering situations that actually reach us.
The thermal-model environment for spacecraft generated code through a parser tied to a toolchain going out of support. Every generated line had to stay compatible.
GQL, the international standard for querying graph databases, existed only on paper. Several hundred pages of grammar had to become a working front end.
Clinical logic expressed in CQL, evaluated across millions of patient records, optimised from overnight batches towards real-time answers.
A language for clinical algorithms and the engine that runs them — then the same algorithms exported and interpreted inside mobile applications.
Three label-printing languages analysed and re-engineered to be re-entrant, so one code path could serve many jobs at once without corrupting state.
Photonics production recipes generated from engineering layer stacks — the hard part being the recognition of loops and intermediate states.
Twenty-one countries on six continents, the large majority of the work outside Italy. Our clients are wherever the problems are, and the work is done the same way in Turin, Singapore and San Francisco.
United States 27 · United Kingdom 6 · France 5 · Italy 5 · Netherlands 5 · Germany 4 · Switzerland 4 · Singapore 2 · Argentina · Australia · Canada · Finland · India · Ireland · Israel · Luxembourg · Portugal · South Africa · South Korea · Spain · Uruguay
The size of the organisation changes the contract, not the engineering. A fifth of the list is shown; the rest are under agreements that let us describe the work but not display the mark.
From a space agency to a two-person startup — what interests us is the size of the contribution, not the size of the client.
Counted by what was actually delivered. Several clients appear in more than one row: a parser that became a licence, a study that became a platform.
Before anything can be analysed, translated or documented, something has to read it correctly. Where we started, and the hardest thing to buy anywhere else.
A language is worth building when the people who understand the rules are not the people who write the code. Clinicians, civil servants, actuaries, field engineers.
The parser is rarely the whole job. What people use is an editor that understands their language — completion, validation, navigation — and the services behind it.
Moving a codebase from one language to another with the behaviour preserved — sometimes because the original is old, just as often because it is too slow or in the wrong place.
Some parsers are not a project but a product: licensed, versioned and maintained, so another company can build on a language without owning the grammar.
Sometimes the deliverable is not code. We train teams to build and maintain languages themselves, and advise on the decisions that are expensive to reverse.
A pension fund’s core system, in a language almost nobody still writes, that nobody had ever mapped. Five workshops produced a migration plan module by module, at a guaranteed price. The work continues.
Set larger where we have done more of it. Mainframe and midrange, statistical, procedural, functional, declarative, and the ones invented by a single company.
Versioned, maintained and sold as components — the part of the business that scales without us in the room.
Language engineering is a small community and it runs on shared infrastructure. We contribute to it, co-author its specifications, and publish our own frameworks.
More than 3,000 commits across fourteen repositories of the open specification for interoperability between language engineering tools — and co-authorship of the specification itself.
More than 2,000 commits to the de-facto standard library for analysing and transforming Java code. Not our project: our contribution to someone else’s.
Our own framework for building parsers and transpilers, in Kotlin, Java, Python, TypeScript and C#. Clients build on it alongside us.
Kotlin as a first-class target for ANTLR 4 — plus Kanvas, SmartReader, LangSandbox and a hundred and sixty more.
Eight titles, written to be used rather than cited — over two thousand of them paid for, and read in at least twenty-two countries.
Conference talks, university lectures, community meetups and a podcast about language engineering — the way a field this small stays connected.
Conversations with the people who build languages, tools and compilers.
Recorded talks, walkthroughs and community sessions.
The first language engineering project: a grammar for OMeta. Everything before it was ordinary software development.
MPS work begins with Voluntis — a collaboration that would run seven years. The first parser sold. Strumenta is incorporated in Turin a year later.
Label-printing languages, actuarial transpilers, midrange and mainframe estates. The parser becomes a product, not just a deliverable.
Languages for public administration and insurance; RPG, SAS and Teradata parsers licensed across four continents.
The official GQL parser for LDBC. CQL in healthcare. BoxLang. RPG to Java and to Python, in production.
If software has to understand software — analyse it, generate it, translate it, verify it — we have almost certainly built something like it, in an industry you would not expect.