Source code for crosstl.translator

"""Frontend API for parsing CrossGL and registering translator extensions."""

from . import lexer
from . import parser
from . import codegen
from .lexer import Lexer
from .parser import Parser
from .codegen.registry import BackendSpec, register_backend, backend_names, get_backend
from .source_registry import SourceSpec, SOURCE_REGISTRY, register_default_sources
from .plugin_loader import discover_backend_plugins


[docs] def parse(shader_code): """Parse shader code and return the AST. Args: shader_code (str): The shader code to parse Returns: The abstract syntax tree """ lexer = Lexer(shader_code) tokens = lexer.tokens parser = Parser(tokens) return parser.parse()
[docs] def register_source(spec: SourceSpec, *, overwrite: bool = False) -> SourceSpec: """Register a new backend source (lexer/parser) spec.""" return SOURCE_REGISTRY.register(spec, overwrite=overwrite)
[docs] def register_backend_spec(spec: BackendSpec, *, overwrite: bool = False) -> BackendSpec: """Register a new backend codegen spec.""" return register_backend(spec, overwrite=overwrite)
[docs] def get_backend_spec(name: str): """Lookup a backend codegen spec.""" return get_backend(name)
[docs] def supported_backends(): """Return registered backend codegens.""" discover_backend_plugins() return backend_names()
[docs] def supported_sources(): """Return registered source backends.""" register_default_sources() discover_backend_plugins() return SOURCE_REGISTRY.names()