了解运行时代码解释和执行
-
19-09-2019 - |
题
我创建的XNA游戏,想创造我自己的脚本语言(非常简单的头脑你)。我知道有更好的方法去了解这一点(和我重新发明轮子),但我想学习经验多要高效和快速。
当在运行时代码面对,从我的理解,通常的做法是解析成机器代码或字节代码或别的东西,实际上是可执行文件,然后执行,对不对?但是,例如,Chrome浏览器在第一次来到了,他们说,他们的JavaScript引擎是快的,因为它编译的JavaScript成机器代码。这意味着其他引擎未被编译成机器代码。
我宁愿不编译到一个较低的语言,所以在那里为解析和执行代码的任何已知的现代技术不编译为低电平?也许类似解析代码转换成某种树,在树的分支,并比较每个符号和调用一些功能来处理该符号? (野生猜测并在黑暗中刺伤)
解决方案
我个人不会推出自己的解析器(旋转输入令牌)或词法分析器(检查你的语言的语法,输入令牌)。看看 ANTLR 解析/词法 - 这是一个很大的框架,并有完整的源代码,如果你想挖掘到它的胆量。
有关执行,你已经被解析的代码,我想看看在 LLVM <运行一个简单的虚拟机,甚至更好看/ A>这是一个开放源码(ISH)尝试以规范的虚拟机的字节码格式,并提供不错的功能等JIT编译(车削脚本编译字节码成汇编)。
我不从更高级的选项,你的机器,如本机代码执行,但要记住,这是一个非常专业的领域,并得到真正的复杂,真正的快速阻止你!
Earlz指出,我的答复似乎暗示“不要打扰这个做自己。重读我的帖子这听起来有点这样。我之所以提到ANTLR和LLVM是它们都具有源代码和教程堆,所以我觉得这是一个很好的参考源。把它作为一个底部和玩
其他提示
您可以尝试建立语言(它与XNA工作得很好)这个框架: http://www.meta-alternative.net/mbase.html
Python是很大的作为脚本语言。我会建议你做一个C#的C API的绑定和使用。嵌入Python是容易的。你的应用程序可以定义在其内部Python解释可以访问模块函数,类型/类和变量。该应用程序还可以调用函数在Python脚本,并得到一个结果返回。这两个功能组合为您提供了双向通信方案。
基本上,你可以免费获得该Python语法和语义。什么,你需要实现你的应用程序公开到Python的API。一个例子可以是访问到游戏逻辑功能和呈现功能。然后Python脚本将定义哪些调用这些函数,和主机应用程序将调用Python函数(带参数)来完成工作。
编辑:好像IronPython的可以为您节省更多的工作。这是CPython的的C#实现,并有自己的嵌入API: http://www.ironpython.net/