gen.py 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. from sys import argv
  2. from re import sub, finditer, VERBOSE
  3. def gen(defs):
  4. indent = 0
  5. enum = False
  6. def p(s): print(" " * (indent * 4) + s)
  7. for item in finditer("""
  8. (?P<type> message|enum) \\s+ (?P<name> \\w+) \\s* \\{ |
  9. (?P<var> \\w+) \\s* = \\s* (?P<val> \\w+) \\s* ; |
  10. \\}
  11. """, defs, flags=VERBOSE):
  12. if item.group(0) == "}":
  13. indent = indent - 1
  14. p("};" if enum else "}")
  15. enum = False;
  16. elif item.group('type') == 'enum':
  17. p("enum class %s {" % item.group('name'))
  18. indent = indent + 1
  19. enum = True
  20. elif item.group('type') == 'message':
  21. p("namespace %s {" % item.group('name'))
  22. indent = indent + 1
  23. enum = False
  24. else:
  25. if enum:
  26. p("%s = %s," % (item.group('var'), item.group('val')))
  27. print("// Auto-generated by reql/gen.py")
  28. print("#pragma once")
  29. print("namespace RethinkDB { namespace Protocol {")
  30. gen(sub("//.*", "", open(argv[1]).read()))
  31. print("} }")