了解运行时代码解释和执行

时间:2010-03-10 23:45:55

标签: language-agnostic language-design interpreter interpreted-language

我正在XNA中创建一个游戏,并且正在考虑创建自己的脚本语言(非常简单的想法)。我知道有更好的方法来解决这个问题(我正在重新发明轮子),但我希望学习经验不仅仅是高效和快速。

在运行时遇到代码时,根据我的理解,通常的方法是解析机器代码或字节代码或其他实际可执行的代码,然后执行它,对吧?但是,例如,当Chrome首次出现时,他们说他们的JavaScript引擎很快,因为它将JavaScript编译成机器代码。这意味着其他引擎没有编译成机器代码。

我不想编译成较低的语言,所以有没有已知的现代技术来解析和执行代码而不编译到低级别?也许就像将代码解析成某种树,在树中分支,比较每个符号并调用一些处理该符号的函数? (在黑暗中狂野猜测和刺伤)

3 个答案:

答案 0 :(得分:2)

我个人不会将您自己的解析器(将输入转换为标记)或词法分析器(检查输入标记以查找您的语言语法)。看看ANTLR解析/ lexing - 这是一个很棒的框架,如果你想挖掘它的内容,它有完整的源代码。

为了执行您已解析的代码,我会考虑运行一个简单的虚拟机,或者更好地查看llvm这是一个开源(ish)尝试来标准化虚拟机字节代码格式并提供很好的功能,如JITing(将脚本编译的字节代码转换为汇编)。

我不会阻止您使用本机代码执行等更高级的选项,但请记住,这是一个非常专业的领域,并且真正快速复杂!

Earlz指出,我的回答似乎暗示着“不要自己这么做。”重新阅读我的帖子确实听起来有点像。我之所以提到ANTLR和LLVM的原因是它们都有大量的源代码和教程,所以我觉得这是一个很好的参考源。以它作为基础并玩

答案 1 :(得分:0)

您可以尝试使用此框架来构建语言(它适用于XNA): http://www.meta-alternative.net/mbase.html

有一些教程: http://www.meta-alternative.net/calc.pdf

http://www.meta-alternative.net/pfront.pdf

答案 2 :(得分:0)

Python非常适合作为脚本语言。我建议你为它的C API做一个C#绑定并使用它。嵌入Python很容易。您的应用程序可以在Python解释器可以访问的模块内定义函数,类型/类和变量。应用程序还可以调用Python脚本中的函数并返回结果。这两个功能相结合,为您提供双向通信方案。

基本上,您可以免费获得Python语法和语义。您需要实现的是您的应用程序向Python公开的API。一个例子可以是访问游戏逻辑功能和渲染功能。然后Python脚本将定义调用这些函数的函数,宿主应用程序将调用Python函数(带参数)来完成工作。

编辑:看起来像IronPython可以为你节省更多的工作。它是CPython的C#实现,并且有自己的嵌入API:http://www.ironpython.net/

相关问题