ソースを参照

Merge pull request #975 from lark-parser/list_grammar_imports2

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.12.0
Erez Shinan 3年前
committed by GitHub
コミット
fbb6a9ede8
この署名に対応する既知のキーがデータベースに存在しません GPGキーID: 4AEE18F83AFDEB23
2個のファイルの変更22行の追加2行の削除
  1. +6
    -0
      lark/load_grammar.py
  2. +16
    -2
      tests/test_grammar.py

+ 6
- 0
lark/load_grammar.py ファイルの表示

@@ -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 ファイルの表示

@@ -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()


読み込み中…
キャンセル
保存