Skip to Content
Compiler Architecture

Compiler Architecture

The DSL never writes target files directly. The intended pipeline is:

.vidro/<project>.vidro
        ↓
      parser
        ↓
       AST
        ↓
 semantic validation
        ↓
     Vidro IR
        ↓
      emitter
        ↓
 environment files

@vidro/language owns the Langium grammar and generated AST. @vidro/core owns semantics after parsing: the IR, validation, detection, resolution policy, and emitter contracts. @vidro/cli calls that core instead of reimplementing it.

IR

The intermediate representation is independent of output format. It models a project, targets, target paths, environments, and variables. A variable value is a literal, a required value, or an external reference.

Generated IR belongs at:

.vidro/.generated/<project>.ir.json

That file is compiler state. The .vidro source remains the source of truth. Whether every command always writes the IR to disk is not decided. The canonical cache location is still .vidro/.generated/.

Emitters

The first emitter should be a deterministic dotenv emitter. Other formats consume the same IR. Native emitters for Java/Kotlin, R, C#, and Swift are not chosen for a first public release, and none of them are implemented. The dotenv emitter is not implemented either. The core package currently exports the IR types and an emitter contract.

Last updated on