def begin(self, interactive=False, **kwargs) -> (GenerationContext, list): from anoky.generation.default_special_forms_table import default_special_forms_table context_root_bindings = Record( default_generator=self, generator=self, domain=SDom, special_forms=default_special_forms_table(), macros=default_macro_table(), id_macros=default_id_macro_table(), interactive=interactive) context_root_bindings.update(kwargs) GC = GenerationContext(**context_root_bindings.__dict__) initialization_nodes = [] # Prepend anoky unit initialization code # Something like: # import anoky.importer as __akyimp__ # import anoky.module as __aky__ # __macros__ = {} # __id_macros__ = {} # __special_forms__ = {} from anoky.generation.stubs import akyimport_init_code as aic from anoky.generation.stubs import macrostore_init_code as mic initialization_nodes.extend(aic) initialization_nodes.extend(mic) return GC, initialization_nodes
def begin(self, interactive=False, **kwargs) -> (GenerationContext, list): from anoky.generation.default_special_forms_table import default_special_forms_table context_root_bindings = Record( default_generator = self, generator = self, domain = SDom, special_forms = default_special_forms_table(), macros = default_macro_table(), id_macros = default_id_macro_table(), interactive=interactive ) context_root_bindings.update(kwargs) GC = GenerationContext(**context_root_bindings.__dict__) initialization_nodes = [] # Prepend anoky unit initialization code # Something like: # import anoky.importer as __akyimp__ # import anoky.module as __aky__ # __macros__ = {} # __id_macros__ = {} # __special_forms__ = {} from anoky.generation.stubs import akyimport_init_code as aic from anoky.generation.stubs import macrostore_init_code as mic initialization_nodes.extend(aic) initialization_nodes.extend(mic) return GC, initialization_nodes
def make_readtable(definition:list): """ Creates a new readtable. The parameter ``definition`` should respect the following format:: definition := [ entries*, default_entry ] entries := [ type_property_value, seq_or_seqs, other_properties? ] default_entry := ['DEFAULT', default_properties] ``type_property_value`` is the value associated with the type_property ``seq_or_seqs`` is a string or a list of strings. ``other_properties`` and ``default_properties`` are dictionaries. """ read_table = Readtable() for spec in definition: if spec[0] == 'DEFAULT': read_table.default_properties.update(spec[1]) else: seqs = spec[1] if isinstance(spec[1], list) else [spec[1]] properties = spec[2] if len(spec) >= 3 else {} for seq in seqs: existing_properties, _ = read_table.query(seq) if existing_properties is not read_table.default_properties: #assert existing_properties['type'] == spec[0] existing_properties.update(properties) else: new_seq_properties = Record({'type': spec[0]}) new_seq_properties.update(properties) read_table.add_or_upd_seq(seq, new_seq_properties) return read_table
def expand_unit(self, unit: Node, **kwargs): assert (isinstance(unit, Node)) context_root_bindings = Record( default_expander=self, expander=self, macros=default_macro_table(), id_macros=default_id_macro_table(), special_forms=default_special_forms_table()) context_root_bindings.update(kwargs) EC = ExpansionContext(**context_root_bindings.__dict__) #unit.cg_context = EC for element in unit: EC.expand(element) return EC