Meg*_*ron 5 c# python parsing ironpython
我正在为我正在制作的游戏开发一些工具.这些工具可以作为使编辑游戏文件更容易的前端.其中一些文件是python脚本文件.例如,我有一个Items.py文件,其中包含以下内容(例如,最小化)
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))
Run Code Online (Sandbox Code Playgroud)
正如我提到的,我想提供一个前端来编辑这个文件,而不需要编辑器直接知道python /编辑文件.我的编辑需要能够:
为此,我开始编写自己的解析器,查找类关键字以及何时使用这些记录的类来构造对象.这适用于简单的数据,但是当我开始使用具有复杂构造函数的类(列表,映射等)时,正确解析变得越来越困难.
在搜索之后,我发现IronPython可以很容易地解析python文件,所以这就是我要做的事情.一旦我构建了抽象语法树,我就使用PythonWalkers来识别和查找我需要的所有信息.这非常适合读取数据,但我没有看到将更新的数据推送到Python文件的简单方法.据我所知,没有办法改变AST中的值,更不用说将AST转换回脚本文件了.如果我错了,我会喜欢有人告诉我如何做到这一点.我现在需要做的是搜索文件直到找到正确的行,然后尝试将数据推送到构造函数中,确保正确的排序.
我有没有看到一些明显的解决方案?我应该继续处理我的解析器并使其支持更复杂的数据类型吗?我真的虽然我使用了IronPython解析器,但我没想到将修改后的数据推回文件是多么棘手.
任何建议,将不胜感激
您需要一个源到源程序转换工具。
此类工具将语言解析为内部数据结构(始终是 AST),允许您修改 AST,然后可以从修改后的 AST 重新生成源文本,而无需更改源的任何内容(除了进行 AST 更改的位置之外)。
这样的程序转换工具必须将文本解析为 AST,并将 AST“反解析”(称为“Prettyprint”)解析为文本。如果 IronPython 有一个漂亮的打印机,那么这就是您所需要的。如果没有,您可以花费一些(可能是很多)努力来构建一个;正如您所观察到的,这并不像人们想象的那么容易。请参阅我的回答 将 AST 编译回源代码
如果这不起作用,我们的DMS 软件重组工具包及其Python 前端可能会解决问题。它具有以上所有属性。
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |