How to use TatSu - 10 common examples

To help you get started, we’ve selected a few TatSu examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github pierky / arouteserver / tests / static / test_rpsl_syntax.py View on Github external
def test_exp_result(self):

        def print_exp_res():
            res = "\n"
            res += " cat < {}".format(exp_res_file) + "\n"
            res += json.dumps(dic, indent=2) + "\n"
            res += "EOF" + "\n"
            res += "\n"
            return res

        self.maxDiff = None

        parser = RPSLViaParser()
        ast = parser.parse(line, rule_name="start")
        dic = asjson(ast)

        if exp_res:
            self.assertDictEqual(dic, exp_res, "\n\nTo fix it:\n{}".format(print_exp_res()))
            return

        print(print_exp_res())
github pierky / arouteserver / tests / static / test_rpsl_syntax.py View on Github external
def _test_syntax(self, line):
        parser = RPSLViaParser()
        ast = parser.parse(line, rule_name="start")

        # Build the reverse statement starting from the result of the parser
        # and check that it matches the input line.
        # Do this only when there are no actions in the original line, too
        # much effort to rebuild the action list.
        if "action" in line:
            return

        dic = asjson(ast)

        from_to = "from" if dic["action"] == "import-via:" else "to"
        accept_announce = "accept" if dic["action"] == "import-via:" else "announce"

        s = "{action} {afi} {rules} {filter}".format(
            action=dic["action"],
            afi="afi {afi_list}".format(
                afi_list=" ".join([afi for afi in dic["afi"]])
            ) if dic["afi"] else "",
            rules=" ".join([
                "{via} {from_to} {peers}".format(
                    from_to=from_to,
                    via="{intermediate_as} {router}".format(
                        intermediate_as=rule["via"]["intermediate_as"],
                        router="{peer} {at} {local}".format(
                            peer=rule["via"]["router"]["peer_router"]
github nitros12 / A-Compiler / tests / test_parser.py View on Github external
def test_fn_in_fn():
    """Test function declarations being impossible inside a function body."""
    decl = emptyfn(emptyfn(""))
    with raises(FailedParse):
        parse_source(decl)
github neogeny / TatSu / tatsu / semantics.py View on Github external
def _default(self, ast, *args, **kwargs):
        if not args:
            return ast

        typespec = args[0].split(BASE_CLASS_TOKEN)
        typename = typespec[0]
        bases = typespec[-1:0:-1]

        base = self.base_type
        for base_ in bases:
            base = self._get_constructor(base_, base)

        constructor = self._get_constructor(typename, base)
        try:
            if type(constructor) is type and issubclass(constructor, Node):
                return constructor(*args[1:], ast=ast, ctx=self.ctx, **kwargs)
            else:
                return constructor(ast, *args[1:], **kwargs)
        except Exception as e:
            raise SemanticError(
                'Could not call constructor for %s: %s'
                % (typename, str(e))
            )
github neogeny / TatSu / tatsu / codegen / objectmodel.py View on Github external
if PY33:
        name = cls.__qualname__
    else:
        name = cls.__name__

    # Try to reference the class
    try:
        idents = name.split('.')
        _cls = getattr(module, idents[0])
        for ident in idents[1:]:
            _cls = getattr(_cls, ident)

        assert _cls == cls
    except AttributeError:
        raise CodegenError("Couldn't find base type, it has to be importable")

    return modulename, name
github neogeny / TatSu / tatsu / codegen / objectmodel.py View on Github external
def _get_full_name(cls):
    if not inspect.isclass(cls):
        raise CodegenError("Base type has to be a class")
    module = inspect.getmodule(cls)
    if not module:
        raise CodegenError("Base type has to be inside a module")
    modulename = module.__name__

    if PY33:
        name = cls.__qualname__
    else:
        name = cls.__name__

    # Try to reference the class
    try:
        idents = name.split('.')
        _cls = getattr(module, idents[0])
        for ident in idents[1:]:
            _cls = getattr(_cls, ident)

        assert _cls == cls
    except AttributeError:
github neogeny / TatSu / tatsu / codegen / objectmodel.py View on Github external
def _get_full_name(cls):
    if not inspect.isclass(cls):
        raise CodegenError("Base type has to be a class")
    module = inspect.getmodule(cls)
    if not module:
        raise CodegenError("Base type has to be inside a module")
    modulename = module.__name__

    if PY33:
        name = cls.__qualname__
    else:
        name = cls.__name__

    # Try to reference the class
    try:
        idents = name.split('.')
        _cls = getattr(module, idents[0])
        for ident in idents[1:]:
            _cls = getattr(_cls, ident)
github neogeny / TatSu / tatsu / codegen / python.py View on Github external
parseinfo = self.node.directives.get('parseinfo', True)

        namechars = repr(self.node.directives.get('namechars') or '')

        rules = '\n'.join([
            self.get_renderer(rule).render() for rule in self.node.rules
        ])

        version = str(tuple(int(n) for n in str(timestamp()).split('.')))

        keywords = [str(k) for k in self.keywords]
        keywords = '\n'.join("    %s," % repr(k) for k in keywords)
        if keywords:
            keywords = '\n%s\n' % keywords

        fields.update(rules=indent(rules),
                      start=self.node.rules[0].name,
                      abstract_rules=abstract_rules,
                      version=version,
                      whitespace=whitespace,
                      nameguard=nameguard,
                      ignorecase=ignorecase,
                      comments_re=comments_re,
                      eol_comments_re=eol_comments_re,
                      left_recursion=left_recursion,
                      parseinfo=parseinfo,
                      keywords=keywords,
                      namechars=namechars,
                      )
github neogeny / TatSu / examples / javascript / sandbojs / parser / js_parser.py View on Github external
    @tatsumasu()
    def _IDENTIFIER_(self):  # noqa
        self._pattern('[\\w$](?:[\\w\\d]|\\\\u[\\dA-Fa-f]{4})*')
github neogeny / TatSu / examples / calc / v2 / calc_parser.py View on Github external
    @tatsumasu()
    def _start_(self):
        self._expression_()
        self._check_eof()