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

1from lark import Lark 

2from lark.load_grammar import FromPackageLoader 

3from pathlib import Path 

4from kye.parser.kye_transformer import transform 

5 

6GRAMMAR_DIR = Path(__file__).parent / 'grammars' 

7 

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 

27 

28parse_definitions = get_parser('definitions', 'definitions') 

29parse_expression = get_parser('expressions', 'exp')