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