serialize.py 965 B

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