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()