我正在尝试学习如何在DLR之上编写一个简单的脚本语言,方法是使用一个名为ToyScript的旧DLR示例.但是,ToyScript似乎不支持脚本的以下结构,我想在我的实现中使用它:
print b() def b() { return 1 }
它引发了一个例外,就像大多数静态编译语言一样.
如果脚本遵循“静态语言范例”:
def b() { return 1 } print b()
ToyScript工作没有问题.
我的问题是:如何在DLR中完成前者?
解决方法
有一些可能的实现.第一种是要求执行来创建一个函数.通过这种方式,您无法在执行创建函数之前调用函数.第二种方法是在解析代码并执行全局脚本时创建所有函数.通过这种方式,函数声明可以出现在代码中的任何位置,因为函数已经在执行之前创建.缺点是你需要创建所有函数,无论你是否调用它们.然后有一种中间方式;当您第一次解析代码时,将函数的抽象语法树(AST)存储在函数表中.然后,当您想要调用一个函数时,在函数表中查找函数声明,然后从AST编译或解释.比较以下两个JavaScript代码段,您将有一个好主意.
console.log(b()); function b() { return 1; }
和
console.log(b()); var b = function() { return 1; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。