diff --git a/lark/tools/nearley.py b/lark/tools/nearley.py index 892fbf9..4adac3a 100644 --- a/lark/tools/nearley.py +++ b/lark/tools/nearley.py @@ -169,17 +169,18 @@ def create_code_for_nearley_grammar(g, start, builtin_path, folder_path): return ''.join(emit_code) -def main(): - if len(sys.argv) < 3: - print("Reads Nearley grammar (with js functions) outputs an equivalent lark parser.") - print("Usage: %s " % sys.argv[0]) - return - - fn, start, nearley_lib = sys.argv[1:] +def main(fn, start, nearley_lib): with codecs.open(fn, encoding='utf8') as f: grammar = f.read() print(create_code_for_nearley_grammar(grammar, start, os.path.join(nearley_lib, 'builtin'), os.path.abspath(os.path.dirname(fn)))) if __name__ == '__main__': - main() + if len(sys.argv) < 4: + print("Reads Nearley grammar (with js functions) outputs an equivalent lark parser.") + print("Usage: %s " % sys.argv[0]) + sys.exit(1) + + fn, start, nearley_lib = sys.argv[1:] + + main(fn, start, nearley_lib) diff --git a/tests/test_nearley/test_nearley.py b/tests/test_nearley/test_nearley.py index 450f7b9..a8d7d19 100644 --- a/tests/test_nearley/test_nearley.py +++ b/tests/test_nearley/test_nearley.py @@ -8,10 +8,10 @@ import codecs logging.basicConfig(level=logging.INFO) -from lark.tools.nearley import create_code_for_nearley_grammar +from lark.tools.nearley import create_code_for_nearley_grammar, main as nearley_tool_main -TEST_PATH = os.path.dirname(__file__) -NEARLEY_PATH = os.path.abspath(os.path.join(TEST_PATH, 'nearley')) +TEST_PATH = os.path.abspath(os.path.dirname(__file__)) +NEARLEY_PATH = os.path.join(TEST_PATH, 'nearley') BUILTIN_PATH = os.path.join(NEARLEY_PATH, 'builtin') class TestNearley(unittest.TestCase): @@ -73,14 +73,7 @@ class TestNearley(unittest.TestCase): def test_utf8_2(self): fn = os.path.join(TEST_PATH, 'grammars/unicode.ne') - with codecs.open(fn, encoding='utf8') as f: - grammar = f.read() - code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, './') - d = {} - exec (code, d) - parse = d['parse'] - - parse(u'±a') + nearley_tool_main(fn, 'main', NEARLEY_PATH) if __name__ == '__main__':