例如::
>>> import ast
>>> print(type(ast.parse('1.2', mode='eval').body.n)
float
如何让解析器将python源文件转换为语法树,同时保留str
类型中节点的原始值?因为我需要使用尽可能精确的分数将例如'1.2'转换为精确值,而不会丢失任何精度(值1.2不能以浮点格式精确表示)。
我希望在不重新实现解析器的情况下这样做。也许还有其他解析器比ast
模块更适合这个。
顺便说一下,我不仅需要解析表达式而且要解析程序。
答案 0 :(得分:0)
我所知道的最先进的AST工具是前astng
项目,它备份了pylint
以及来自logilab的类似工具。现在它被称为Astroid
并且可以从https://bitbucket.org/logilab/astroid/获得。如果它没有帮助,那么可能什么都不会。
答案 1 :(得分:0)
LibCST是一个Python具体语法树解析器和工具包,可用于解决您的问题。它提供了一个看起来像ast的语法树,并将浮动格式保留为字符串。 https://github.com/Instagram/LibCST/
https://libcst.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'