@@ -169,17 +169,18 @@ def create_code_for_nearley_grammar(g, start, builtin_path, folder_path): | |||||
return ''.join(emit_code) | 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 <nearley_grammar_path> <start_rule> <nearley_lib_path>" % 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: | with codecs.open(fn, encoding='utf8') as f: | ||||
grammar = f.read() | grammar = f.read() | ||||
print(create_code_for_nearley_grammar(grammar, start, os.path.join(nearley_lib, 'builtin'), os.path.abspath(os.path.dirname(fn)))) | print(create_code_for_nearley_grammar(grammar, start, os.path.join(nearley_lib, 'builtin'), os.path.abspath(os.path.dirname(fn)))) | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
main() | |||||
if len(sys.argv) < 4: | |||||
print("Reads Nearley grammar (with js functions) outputs an equivalent lark parser.") | |||||
print("Usage: %s <nearley_grammar_path> <start_rule> <nearley_lib_path>" % sys.argv[0]) | |||||
sys.exit(1) | |||||
fn, start, nearley_lib = sys.argv[1:] | |||||
main(fn, start, nearley_lib) |
@@ -8,10 +8,10 @@ import codecs | |||||
logging.basicConfig(level=logging.INFO) | 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') | BUILTIN_PATH = os.path.join(NEARLEY_PATH, 'builtin') | ||||
class TestNearley(unittest.TestCase): | class TestNearley(unittest.TestCase): | ||||
@@ -73,14 +73,7 @@ class TestNearley(unittest.TestCase): | |||||
def test_utf8_2(self): | def test_utf8_2(self): | ||||
fn = os.path.join(TEST_PATH, 'grammars/unicode.ne') | 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__': | if __name__ == '__main__': | ||||