我正在为我正在制作的游戏开发一些工具。这些工具可以作为编辑游戏文件的前端。几个文件是python脚本文件。举例来说,我有一个包含以下(minimalized例如)从C操作Python文件#
from ItemModule import *
import copy
class ScriptedItem(Item):
def __init__(self, name, description, itemtypes, primarytype, flags, usability, value, throwpower):
Item.__init__(self, name, description, itemtypes, primarytype, flags, usability, value, throwpower, Item.GetNextItemID())
def Clone(self):
return copy.deepcopy(self)
ItemLibrary.AddItem(ScriptedItem("Abounding Crystal", "A colourful crystal composed of many smaller crystals. It gives off a warm glow.", ItemType.SynthesisMaterial, ItemType.SynthesisMaterial, 0, ItemUsage.Unusable, 0, 50))
正如我所说,我想为编辑这个文件,而无需requring编辑器来了解Python /编辑提供一个前端的Items.py文件该文件直接。我的编辑需要能够:
- 查找并列出所有类类型(在这个例子中,它会是唯一 脚本项)
- 查找并列出所有创建的项目(在这种情况下,” d只有一个, Abounding Crystal)。我需要找到类型(在此 caseScriptedItem中)和所有参数值
- 允许编辑参数以及创建/删除项目。
为此,我开始编写我自己的解析器,查找class关键字以及何时使用这些记录的类来构造对象。这适用于简单的数据,但是当我开始使用具有复杂构造函数(列表,地图等)的类时,正确解析变得越来越困难。
经过四处搜索,我发现IronPython可以很容易地解析python文件,所以这就是我所做的。一旦我构建了抽象语法树,我使用PythonWalkers来识别并找到所需的所有信息。这对于读取数据非常有效,但我没有看到将更新后的数据推送到Python文件的简单方法。据我所知,没有办法改变AST的值,更不用说将AST转换回脚本文件。如果我错了,我希望有人告诉我如何做到这一点。我现在需要做的是搜索文件,直到找到正确的行,然后尝试将数据推入构造函数,确保排序正确。
有没有一些明显的解决方案,我没有看到?我应该继续研究解析器并使其支持更复杂的数据类型吗?尽管我已经使用过IronPython解析器,但我没有考虑将修改过的数据重新放入文件中有多棘手。
任何建议,将不胜感激