1234567891011121314151617181920212223242526272829303132333435363738 |
- from importlib.metadata import version
- from sympy.external import import_module
- autolevparser = import_module('sympy.parsing.autolev._antlr.autolevparser',
- import_kwargs={'fromlist': ['AutolevParser']})
- autolevlexer = import_module('sympy.parsing.autolev._antlr.autolevlexer',
- import_kwargs={'fromlist': ['AutolevLexer']})
- autolevlistener = import_module('sympy.parsing.autolev._antlr.autolevlistener',
- import_kwargs={'fromlist': ['AutolevListener']})
- AutolevParser = getattr(autolevparser, 'AutolevParser', None)
- AutolevLexer = getattr(autolevlexer, 'AutolevLexer', None)
- AutolevListener = getattr(autolevlistener, 'AutolevListener', None)
- def parse_autolev(autolev_code, include_numeric):
- antlr4 = import_module('antlr4')
- if not antlr4 or not version('antlr4-python3-runtime').startswith('4.11'):
- raise ImportError("Autolev parsing requires the antlr4 Python package,"
- " provided by pip (antlr4-python3-runtime)"
- " conda (antlr-python-runtime), version 4.11")
- try:
- l = autolev_code.readlines()
- input_stream = antlr4.InputStream("".join(l))
- except Exception:
- input_stream = antlr4.InputStream(autolev_code)
- if AutolevListener:
- from ._listener_autolev_antlr import MyListener
- lexer = AutolevLexer(input_stream)
- token_stream = antlr4.CommonTokenStream(lexer)
- parser = AutolevParser(token_stream)
- tree = parser.prog()
- my_listener = MyListener(include_numeric)
- walker = antlr4.ParseTreeWalker()
- walker.walk(my_listener, tree)
- return "".join(my_listener.output_code)
|