我有一些由 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,我不知道如何翻译它...
有人能指出我正确的方向吗?
最佳答案
NetLogo 就其全部通用性而言是一种相当难以解析的语言。 (这是我们真正的解析器: https://github.com/NetLogo/NetLogo/blob/5.0.x/src/main/org/nlogo/compiler/ExpressionParser.scala ;Repast 的人在构建 ReLogo 的 NetLogo 模型转换器时也写了一个,显然是使用 ANTLR, here 。)
您需要支持的 NetLogo 子集有多大或多小?
如果你的目标子集足够小,那么这主要是一个关于如何在 Python 中进行解析的问题。我不是 Pythonista,所以我不是回答这个问题的最佳人选。
如果你的目标子集足够大,你最好编写Python代码来启动JVM并直接调用NetLogo解析器,这样你就不必编写自己的解析器,但可以只需编写处理已解析语法树的 Python 代码即可。请参阅我的帖子 https://groups.google.com/d/msg/netlogo-devel/mDBskQMboYs/MycJtLh32S0J有关于此的一些信息。
关于python - 用python解析netlogo代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848438/