【发布时间】:2013-12-15 23:53:54
【问题描述】:
我正在尝试学习如何在 DLR 之上编写一种简单的脚本语言,方法是使用一个非常古老的 DLR 示例,称为 ToyScript。然而,ToyScript 似乎不支持以下脚本结构,我想在我的实现中使用它:
print b()
def b() {
return 1
}
它会引发异常,与大多数静态编译的语言完全相同。'
如果脚本遵循“静态语言范例”:
def b() {
return 1
}
print b()
ToyScript 可以正常运行。
我的问题是:前者应该如何在 DLR 中完成?
[显然我正在寻找解决方案的描述,而不是解决方案本身:)]
【问题讨论】:
-
关于“在大多数静态编译语言中”:我不知道,但我知道在许多 动态 语言中执行第一个块时会出错也是(JavaScript、Python 和 Ruby,仅举几例)。
-
我刚刚查看了IronPython,但实现它似乎需要做很多工作。您可能想看看他们是如何做到的,然后反复试验。
-
你必须做一个更聪明的解释器。它需要使 two 穿过该代码。第一遍必须添加定义,第二遍执行代码。静态编译器这样做的方式:)
-
脚本通常从上到下解释。因此,对 b 的调用不能在声明之前。
标签: c# dynamic-language-runtime dynamic-languages