Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
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
Esempio n. 4
0
    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