2

例如::

>>> import ast
>>> print(type(ast.parse('1.2', mode='eval').body.n)
float

如何让解析器将 python 源文件转换为语法树,同时保留str类型中节点的原始值?因为我需要使用尽可能精确的分数将例如 '1.2' 转换为精确值,而不会丢失任何精度(值 1.2 不能以浮点格式精确表示)。

最好我希望在不重新实现解析器的情况下这样做。ast也许有其他解析器比模块更适合这个。

顺便说一句,我不仅需要解析表达式,还需要解析程序。

4

2 回答 2

0

据我所知,使用 AST 的最先进的工具是logilab的前astng一个项目和类似工具的备份。pylint现在它被调用Astroid并可以从https://bitbucket.org/logilab/astroid/获得。如果它没有帮助,那么可能什么也做不了。

于 2013-11-27T13:31:14.867 回答
0

LibCST 是一个 Python 具体语法树解析器和工具包,可用于解决您的问题。它提供了一个看起来像 ast 的语法树,并将浮动格式保留为字符串。 https://github.com/Instagram/LibCST/

https://libcs​​t.readthedocs.io/en/latest/index.html

这里有些例子:

In [1]: import libcst as cst

In [2]: cst.parse_expression("1.2")
Out[2]:
Float(
    value='1.2',
    lpar=[],
    rpar=[],
)

In [3]: cst.parse_expression("1.2").value
Out[3]: '1.2'

In [4]: cst.parse_expression("5e-2").value
Out[4]: '5e-2'
于 2019-12-18T20:19:03.767 回答