11# -*- coding: utf-8 -*-
22
3- from typing import Any , FrozenSet , Tuple
3+ from typing import FrozenSet , Optional , Tuple
44
55from mathics_scanner .feed import LineFeeder
66
7+ from mathics .core .definitions import Definitions
8+ from mathics .core .element import BaseElement
79from mathics .core .parser .convert import convert
810from mathics .core .parser .feed import MathicsSingleLineFeeder
911from mathics .core .parser .parser import Parser
1214parser = Parser ()
1315
1416
15- def parse (definitions , feeder : LineFeeder ) -> Any :
17+ def parse (definitions , feeder : LineFeeder ) -> Optional [ BaseElement ] :
1618 """
1719 Parse input (from the frontend, -e, input files, ToExpression etc).
1820 Look up symbols according to the Definitions instance supplied.
@@ -22,7 +24,9 @@ def parse(definitions, feeder: LineFeeder) -> Any:
2224 return parse_returning_code (definitions , feeder )[0 ]
2325
2426
25- def parse_incrementally_by_line (definitions , feeder : LineFeeder ) -> Any :
27+ def parse_incrementally_by_line (
28+ definitions : Definitions , feeder : LineFeeder
29+ ) -> Optional [BaseElement ]:
2630 """Parse input incrementally by line. This is in contrast to parse() or
2731 parser_returning_code(), which parse the *entire*
2832 input which could be many line.
@@ -50,19 +54,28 @@ def parse_incrementally_by_line(definitions, feeder: LineFeeder) -> Any:
5054 return convert (ast , definitions )
5155
5256
53- def parse_returning_code (definitions , feeder : LineFeeder ) -> Tuple [Any , str ]:
54- """
55- Parse input (from the frontend, -e, input files, ToExpression etc).
57+ def parse_returning_code (
58+ definitions : Definitions , feeder : LineFeeder
59+ ) -> Tuple [Optional [BaseElement ], str ]:
60+ """Parse input (from the frontend, -e, input files, ToExpression etc).
5661 Look up symbols according to the Definitions instance supplied.
5762
58- Feeder must implement the feed and empty methods, see core/parser/feed.py.
63+ ``feeder`` must implement the ``feed()`` and ``empty()``
64+ methods. See the mathics_scanner.feed module.
65+
5966 """
67+ from mathics .core .expression import Expression
68+
6069 ast = parser .parse (feeder )
61- source_code = parser .tokeniser .code if hasattr (parser .tokeniser , "code" ) else ""
62- if ast is not None :
63- return convert (ast , definitions ), source_code
64- else :
65- return None , source_code
70+
71+ source_text = parser .tokeniser .source_text
72+
73+ if ast is None :
74+ return None , source_text
75+
76+ converted = convert (ast , definitions )
77+
78+ return converted , source_text
6679
6780
6881class SystemDefinitions :
0 commit comments