【发布时间】:2019-08-02 09:53:18
【问题描述】:
我正在尝试分析不完整 python 代码的 sn-ps(来自 github diffs),并且我想解析特定标记是否是 python 语言的元素(例如“if”或“+”或“def”) , 如果它是一个函数调用(如“initialize()”),或者它是一个变量名。
代码以字符串形式提供。
我已经看过 python 标记器 (https://docs.python.org/3/library/tokenize.html),它很有帮助,因为它可以区分 cmets、字符串、名称和操作。但此工具会将“def”和“print”识别为 NAME,就像它识别“my_function()”或“counter”或任何其他变量或函数名称一样。
我想区分被解析为变量的事物和被解析为函数的事物。
我也看过 eval 和 exec,但我不想执行我的代码,我只想逐个令牌地遍历它,找出令牌是什么类型的 python 语言元素。
有什么办法吗?
【问题讨论】:
-
您无法区分
print和my_function,因为它们实际上只是名称。def不同,因为它是一个关键字。 -
我也查看了 AST 模块,但似乎这不适用于未形成完整有效代码块的不完整 sn-ps 代码?
-
是的,它不会让您将输出映射到令牌。
标签: python python-3.x parsing