Files
langkit/testsuite/tests/python-api/tokens/test.py
Raphael Amiard 71c98b473b Q623-030: list_type() -> list
Change-Id: Ib446de025d6d44bf4f52d9c63fa86eb16fdd8a26
2017-06-28 18:20:13 +02:00

40 lines
876 B
Python

from __future__ import absolute_import, division, print_function
import os.path
from langkit.diagnostics import Diagnostics
from langkit.dsl import ASTNode, Field, Token as TokenType
from langkit.parsers import Grammar, List, Or, Pick, Tok
from lexer_example import Token
from utils import build_and_run
Diagnostics.set_lang_source_dir(os.path.abspath(__file__))
class FooNode(ASTNode):
pass
class Sequence(FooNode.list):
pass
class Atom(FooNode):
tok = Field(type=TokenType)
foo_grammar = Grammar('main_rule')
foo_grammar.add_rules(
main_rule=foo_grammar.element,
element=Or(foo_grammar.sequence, foo_grammar.atom),
sequence=Pick('(', List(foo_grammar.element, list_cls=Sequence,
empty_valid=True), ')'),
atom=Atom(Tok(Token.Identifier, keep=True)),
)
build_and_run(foo_grammar, 'main.py')
print('Done')