1import codecs
2import sys
3import json
4
5from lark import Lark
6from lark.grammar import RuleOptions, Rule
7from lark.lexer import TerminalDef
8from lark.tools import lalr_argparser, build_lalr
9
10import argparse
11
12argparser = argparse.ArgumentParser(prog='python -m lark.tools.serialize', parents=[lalr_argparser],
13                                    description="Lark Serialization Tool - Stores Lark's internal state & LALR analysis as a JSON file",
14                                    epilog='Look at the Lark documentation for more info on the options')
15
16
17def serialize(lark_inst, outfile):
18    data, memo = lark_inst.memo_serialize([TerminalDef, Rule])
19    outfile.write('{\n')
20    outfile.write('  "data": %s,\n' % json.dumps(data))
21    outfile.write('  "memo": %s\n' % json.dumps(memo))
22    outfile.write('}\n')
23
24
25def main():
26    if len(sys.argv)==1:
27        argparser.print_help(sys.stderr)
28        sys.exit(1)
29    ns = argparser.parse_args()
30    serialize(*build_lalr(ns))
31
32
33if __name__ == '__main__':
34    main()
35