m2m模型翻译
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
1.7 KiB

7 months ago
  1. from sympy.external import import_module
  2. autolevparser = import_module('sympy.parsing.autolev._antlr.autolevparser',
  3. import_kwargs={'fromlist': ['AutolevParser']})
  4. autolevlexer = import_module('sympy.parsing.autolev._antlr.autolevlexer',
  5. import_kwargs={'fromlist': ['AutolevLexer']})
  6. autolevlistener = import_module('sympy.parsing.autolev._antlr.autolevlistener',
  7. import_kwargs={'fromlist': ['AutolevListener']})
  8. AutolevParser = getattr(autolevparser, 'AutolevParser', None)
  9. AutolevLexer = getattr(autolevlexer, 'AutolevLexer', None)
  10. AutolevListener = getattr(autolevlistener, 'AutolevListener', None)
  11. def parse_autolev(autolev_code, include_numeric):
  12. antlr4 = import_module('antlr4', warn_not_installed=True)
  13. if not antlr4:
  14. raise ImportError("Autolev parsing requires the antlr4 Python package,"
  15. " provided by pip (antlr4-python2-runtime or"
  16. " antlr4-python3-runtime) or"
  17. " conda (antlr-python-runtime)")
  18. try:
  19. l = autolev_code.readlines()
  20. input_stream = antlr4.InputStream("".join(l))
  21. except Exception:
  22. input_stream = antlr4.InputStream(autolev_code)
  23. if AutolevListener:
  24. from ._listener_autolev_antlr import MyListener
  25. lexer = AutolevLexer(input_stream)
  26. token_stream = antlr4.CommonTokenStream(lexer)
  27. parser = AutolevParser(token_stream)
  28. tree = parser.prog()
  29. my_listener = MyListener(include_numeric)
  30. walker = antlr4.ParseTreeWalker()
  31. walker.walk(my_listener, tree)
  32. return "".join(my_listener.output_code)