Architecture ============ CrossGL Translator is built around a two-direction pipeline. Source ingestion ---------------- Source registries map file extensions and source names to lexer/parser pairs. Native shader inputs such as HLSL, Metal, GLSL, Vulkan-style SPIR-V text representations, CUDA, HIP, Rust, Mojo, and Slang can be parsed into backend ASTs and converted back into CrossGL where reverse code generation exists. CrossGL frontend ---------------- The CrossGL lexer and parser produce the canonical translator AST used by target code generators. The AST lives in ``crosstl.translator.ast`` and keeps shader stages, declarations, statements, expressions, resource bindings, and backend attributes in one representation. Target generation ----------------- Backend generators under ``crosstl.translator.codegen`` consume the CrossGL AST and emit target code. The registry normalizes backend aliases, resolves file extensions, and lets plugins add new targets without changing the public ``crosstl.translate`` entry point.