加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 学习DLR(如何在其上实现语言)

发布时间:2020-12-15 21:59:08 所属栏目:百科 来源:网络整理
导读:我正在尝试学习如何在DLR之上编写一个简单的脚本语言,方法是使用一个名为ToyScript的旧DLR示例.但是,ToyScript似乎不支持脚本的以下结构,我想在我的实现中使用它: print b()def b() { return 1 } 它引发了一个例外,就像大多数静态编译语言一样. 如果脚本遵
我正在尝试学习如何在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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读