main.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/python
  2. """
  3. Shell front-end for the mathematical term rewriting system. This shell will
  4. parse mathematical expressions into an expression tree, produce possible
  5. rewrite steps and, if requested, provide a hint to rewrite the last entered
  6. expression.
  7. """
  8. import argparse
  9. import sys
  10. import os
  11. def init_readline():
  12. try:
  13. import readline
  14. except ImportError:
  15. return
  16. histfile = os.path.join(os.path.expanduser("~"), ".trs_hist")
  17. try:
  18. readline.read_history_file(histfile)
  19. except IOError:
  20. pass
  21. import atexit
  22. atexit.register(readline.write_history_file, histfile)
  23. def get_args():
  24. parser = argparse.ArgumentParser(prog='trs', description=__doc__)
  25. parser.add_argument('--debug', '-d', action='store_true',
  26. default=False,
  27. help='Enable debug mode in bison and flex.')
  28. parser.add_argument('--verbose', '-v', action='store_true',
  29. default=False,
  30. help='Enable verbose output messages (printed to stdout).')
  31. parser.add_argument('--keepfiles', '-k', action='store_true',
  32. default=False,
  33. help='Keep temporary generated bison and lex files.')
  34. parser.add_argument('--batch', '-b', action='store_true', default=False,
  35. help='Disable interactive mode and execute expressions in batch' \
  36. ' mode.')
  37. parser.add_argument('--interactive', action='store_true',
  38. default=sys.stdin.isatty(),
  39. help='Enable interactive mode (default). This is the inverse of' \
  40. ' --batch.')
  41. return parser.parse_args()
  42. def main():
  43. from src.parser import Parser
  44. args = get_args()
  45. interactive = args.interactive and not args.batch
  46. p = Parser(verbose=args.verbose,
  47. keepfiles=args.keepfiles,
  48. interactive=interactive)
  49. node = p.run(debug=args.debug)
  50. # Clear the line, when the shell exits.
  51. if interactive:
  52. print
  53. return node
  54. if __name__ == '__main__':
  55. init_readline()
  56. main()