Coverage for kye/parser/parser.py: 71%
14 statements
« prev ^ index » next coverage.py v7.3.2, created at 2024-01-04 12:03 -0700
« prev ^ index » next coverage.py v7.3.2, created at 2024-01-04 12:03 -0700
1from lark import Lark
2from lark.load_grammar import FromPackageLoader
3from pathlib import Path
4from kye.parser.kye_transformer import transform
6GRAMMAR_DIR = Path(__file__).parent / 'grammars'
8def get_parser(grammar_file, start_rule):
9 def parse(text):
10 parser = Lark(
11 f"""
12 %import {grammar_file}.{start_rule}
13 %import tokens (WS, COMMENT)
14 %ignore WS
15 %ignore COMMENT
16 """,
17 start=start_rule,
18 parser='lalr',
19 # strict=True,
20 propagate_positions=True,
21 import_paths=[FromPackageLoader(__name__, ('grammars',))],
22 )
23 tree = parser.parse(text)
24 ast = transform(tree, text)
25 return ast
26 return parse
28parse_definitions = get_parser('definitions', 'definitions')
29parse_expression = get_parser('expressions', 'exp')