zerodds-lang-cst
Concrete syntax trees for the 21 target languages of
Language::ALL. Built, never parsed; typed construction with no string escape hatch.
- Source: crates/lang-cst
- API docs: docs.rs/zerodds-lang-cst
Concrete syntax trees for the 21 target languages of Language::ALL (src/common.rs), one module per language: Rust, C++, C, Java, C#, Python, TypeScript, Go, OCaml, Ada, D, Elixir, Julia, Lua, Nim, Swift, Zig, Node, Ada 83, F#, Kotlin.
These trees are built, never parsed. A generator produces one and a renderer writes it out; nothing reads target-language text back in.
Two properties the trees exist for:
- Concrete, not abstract. The tree records what will be written. If the output derives
DebugandClone, that is two derive nodes in a recorded order — not a flag a renderer expands, because a renderer that expands flags is a renderer that makes decisions. - Typed construction. There is no constructor that takes a fragment of target-language text. A string escape hatch is how language-specific logic leaks back out of the rules and into the emitter.
There is deliberately no shared target model. Rust has attributes and derives, C++ has namespaces and templates, C has neither and has typedefs, Java has annotations and type parameters. A model that pretended they were the same would push the difference into the renderer, where it stops being reviewable.
Position
- No dependency on another ZeroDDS crate.
- Filled by
zerodds-lang-rules, written out byzerodds-lang-render. - The three crates replace the former per-language generators
zerodds-idl-cpp,zerodds-idl-python,zerodds-idl-rust,zerodds-idl-ts,zerodds-idl-csharp,zerodds-idl-java.
Specification
zerodds-lang-cst
Konkrete Syntaxbäume für die 21 Zielsprachen von
Language::ALL. Gebaut, nie geparst; typisierte Konstruktion ohne Ausweg über Strings.
- Quelle: crates/lang-cst
- API-Docs: docs.rs/zerodds-lang-cst
Konkrete Syntaxbäume für die 21 Zielsprachen von Language::ALL (src/common.rs), ein Modul je Sprache: Rust, C++, C, Java, C#, Python, TypeScript, Go, OCaml, Ada, D, Elixir, Julia, Lua, Nim, Swift, Zig, Node, Ada 83, F#, Kotlin.
Diese Bäume werden gebaut, nie geparst. Ein Generator erzeugt einen, ein Renderer schreibt ihn aus; nichts liest Text der Zielsprache wieder ein.
Zwei Eigenschaften, für die es die Bäume gibt:
- Konkret, nicht abstrakt. Der Baum hält fest, was geschrieben wird. Wenn die Ausgabe
DebugundCloneableitet, sind das zwei Derive-Knoten in festgehaltener Reihenfolge — kein Flag, das ein Renderer expandiert, denn ein Renderer, der Flags expandiert, trifft Entscheidungen. - Typisierte Konstruktion. Es gibt keinen Konstruktor, der ein Stück Text der Zielsprache nimmt. Ein Ausweg über Strings ist der Weg, auf dem sprachspezifische Logik aus den Regeln zurück in den Emitter sickert.
Ein gemeinsames Zielmodell gibt es absichtlich nicht. Rust hat Attribute und Derives, C++ hat Namensräume und Templates, C hat beides nicht und hat Typedefs, Java hat Annotationen und Typparameter. Ein Modell, das so täte, als wären sie gleich, schöbe den Unterschied in den Renderer, wo er sich nicht mehr prüfen lässt.
Stellung
- Keine Abhängigkeit von einer anderen ZeroDDS-Crate.
- Gefüllt von
zerodds-lang-rules, ausgeschrieben vonzerodds-lang-render. - Die drei Crates ersetzen die früheren Generatoren je Sprache
zerodds-idl-cpp,zerodds-idl-python,zerodds-idl-rust,zerodds-idl-ts,zerodds-idl-csharp,zerodds-idl-java.