Files
uwrap/lang_test/language/parser.py
Quentin Ochem f45281cb7a Implemented check for language entity hierarchies
A consequence is that matcher on language entity types are now case
sensitive (updated baseline accordingly).
2020-06-07 23:22:55 -04:00

37 lines
884 B
Python

from langkit.dsl import ASTNode, abstract, Field
from langkit.parsers import Grammar, List, Pick, Or, Opt, Null
from language.lexer import *
@abstract
class TestNode(ASTNode):
pass
@abstract
class NamedEntity (TestNode):
name = Field()
class Entity(NamedEntity):
nested = Field()
class Call(NamedEntity):
args = Field()
nested = Field()
class Identifier(TestNode):
token_node = True
class Number(TestNode):
token_node = True
test_grammar = Grammar('main_rule')
G = test_grammar
test_grammar.add_rules(
main_rule=G.entity_list,
entity_list=List (Or (G.call, G.entity, G.number), sep=',', empty_valid=True),
entity=Entity (G.identifier, Opt ('{', G.entity_list, '}')),
call=Call (G.identifier, '(', G.entity_list, ')', Opt ('{', G.entity_list, '}')),
identifier=Identifier(Token.Identifier),
number=Number(Token.Integer)
)