zerodds-lang-rules

Maps the common AST onto the language CSTs through rules that are data, not code: seesaw v2 rule specifications, comparable and checkable.

Maps the common AST onto the language CSTs.

The rules are data, not code. A rule is a RuleV2 value: it names an L-side pattern over the model, an R-side pattern over a language CST, and the correspondences between them. It can be compared, serialised, and checked for completeness. Two languages' treatment of @optional is a diff between two values, not a reading of two separate emitters.

Rules are minimal and positive: small rules that compose, monotone and add-only, with no negative application conditions. One rule maps a struct to a type declaration; a second maps a member to a field; a third adds a derive. A single rule doing all three could not be reused for the members of a union.

The engine is the v2 layer of seesaw, seesaw_core::v2.

Command line

zerodds-idlc generate --lang <name> emits one language from the model; --lang all emits every one. The names: rust, c++, c, java, c#, python, typescript, go, ocaml, ada, d, elixir, julia, lua, nim, swift, zig, node, ada83, f#, kotlin. An unknown name lists the valid ones.

zerodds-idlc generate --lang c++ --out ./ ./character.idl
# → character.hpp

Command reference: idlc, zerodds-idlc(1). In a Cargo build, zerodds-build calls the same rules for Rust.

Position

Specification

docs/specs/zerodds-lang-cst-1.0.md §2 to §4.

zerodds-lang-rules

Bildet den gemeinsamen AST über Regeln, die Daten sind und kein Code, auf die Sprach-CSTs ab: Regelspezifikationen nach seesaw v2, vergleichbar und prüfbar.

Bildet den gemeinsamen AST auf die Sprach-CSTs ab.

Die Regeln sind Daten, kein Code. Eine Regel ist ein Wert vom Typ RuleV2: Sie nennt ein Muster der linken Seite über dem Modell, ein Muster der rechten Seite über einem Sprach-CST und die Entsprechungen zwischen beiden. Sie lässt sich vergleichen, serialisieren und auf Vollständigkeit prüfen. Wie zwei Sprachen @optional behandeln, ist ein Diff zwischen zwei Werten und nicht die Lektüre zweier getrennter Emitter.

Regeln sind minimal und positiv: kleine Regeln, die sich zusammensetzen, monoton und nur hinzufügend, ohne negative Anwendungsbedingungen. Eine Regel bildet einen Struct auf eine Typdeklaration ab, eine zweite einen Member auf ein Feld, eine dritte fügt ein Derive hinzu. Eine einzige Regel, die alle drei Schritte macht, ließe sich für die Member einer Union nicht wiederverwenden.

Die Engine ist die v2-Schicht von seesaw, seesaw_core::v2.

Kommandozeile

zerodds-idlc generate --lang <name> erzeugt eine Sprache aus dem Modell; --lang all erzeugt alle. Die Namen: rust, c++, c, java, c#, python, typescript, go, ocaml, ada, d, elixir, julia, lua, nim, swift, zig, node, ada83, f#, kotlin. Ein unbekannter Name listet die gültigen auf.

zerodds-idlc generate --lang c++ --out ./ ./character.idl
# → character.hpp

Befehlsreferenz: idlc, zerodds-idlc(1). In einem Cargo-Build ruft zerodds-build dieselben Regeln für Rust auf.

Stellung

Spezifikation

docs/specs/zerodds-lang-cst-1.0.md §2 bis §4.