用Python解析NetLogo代码
我有一些代码是通过一个netlogo模拟生成的,我需要用Python来读取和解析这些代码。接下来,这些代码需要在一个非常特定的模拟中运行,那个模拟会有一些函数来匹配netlogo的代码。
比如说:
netlogoCode = "ifelse ahead-clear [ move ][ turn-left move ]"
def ahead-cear(self, )
### returns true if the environment ahead of the agent is clear
def turn-left(self, )
### turns the agent 90 degrees to the left
我现在最困惑的是如何处理这个程序……我最担心的是ifelse语句里面可能还有另一个ifelse,我不太确定该怎么翻译这个……
有没有人能给我一些建议?
1 个回答
1
NetLogo这个语言整体上比较复杂,不太好理解。这里有一个真实的解析器:https://github.com/NetLogo/NetLogo/blob/5.0.x/src/main/org/nlogo/compiler/ExpressionParser.scala;还有Repast团队也写了一个,听说是用ANTLR做的,目的是为了构建ReLogo的NetLogo模型转换器,链接在这里:这里。
你需要支持的NetLogo的子集有多大呢?
如果你要支持的子集比较小,那么主要就是在Python中如何进行解析的问题。我不是Python方面的专家,所以不太能给出好的建议。
如果你要支持的子集比较大,建议你写一些Python代码,启动一个JVM(Java虚拟机),直接调用NetLogo的解析器。这样你就不需要自己写解析器,而是可以直接处理已经解析好的语法树。想了解更多信息,可以看看我在这里的帖子:https://groups.google.com/d/msg/netlogo-devel/mDBskQMboYs/MycJtLh32S0J。