Selaa lähdekoodia

Added utility function: List grammar imports + test

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.12.0
Erez Sh 3 vuotta sitten
vanhempi
commit
b3816b9a90
2 muutettua tiedostoa jossa 22 lisäystä ja 2 poistoa
  1. +6
    -0
      lark/load_grammar.py
  2. +16
    -2
      tests/test_grammar.py

+ 6
- 0
lark/load_grammar.py Näytä tiedosto

@@ -1336,6 +1336,12 @@ def verify_used_files(file_hashes):
return False
return True

def list_grammar_imports(grammar, import_paths=[]):
"Returns a list of paths to the lark grammars imported by the given grammar (recursively)"
builder = GrammarBuilder(False, import_paths)
builder.load_grammar(grammar, '<string>')
return list(builder.used_files.keys())

def load_grammar(grammar, source, import_paths, global_keep_all_tokens):
builder = GrammarBuilder(global_keep_all_tokens, import_paths)
builder.load_grammar(grammar, source)


+ 16
- 2
tests/test_grammar.py Näytä tiedosto

@@ -1,10 +1,10 @@
from __future__ import absolute_import

import sys
import os
from unittest import TestCase, main

from lark import Lark, Token, Tree, ParseError, UnexpectedInput
from lark.load_grammar import GrammarError, GRAMMAR_ERRORS, find_grammar_errors
from lark.load_grammar import GrammarError, GRAMMAR_ERRORS, find_grammar_errors, list_grammar_imports
from lark.load_grammar import FromPackageLoader


@@ -258,6 +258,20 @@ class TestGrammar(TestCase):
for i in (-1, 1000):
self.assertRaises(UnexpectedInput, l.parse, str(i))

def test_list_grammar_imports(self):
grammar = """
%import .test_templates_import (start, sep)

%override sep{item, delim}: item (delim item)* delim?
%ignore " "
"""

imports = list_grammar_imports(grammar, [os.path.dirname(__file__)])
self.assertEqual({os.path.split(i)[-1] for i in imports}, {'test_templates_import.lark', 'templates.lark'})

imports = list_grammar_imports('%import common.WS', [])
assert len(imports) == 1 and imports[0].pkg_name == 'lark'


if __name__ == '__main__':
main()


Ladataan…
Peruuta
Tallenna