【问题标题】:What is the difference between compiler and interpreter in terms of Scoping?就作用域而言,编译器和解释器有什么区别?
【发布时间】:2018-02-18 13:47:22
【问题描述】:

我们说编译器的作用域是静态的,而解释器的作用域是动态的,那么这里的作用域是什么意思,为什么编译器是静态的,解释器是动态的?

【问题讨论】:

    标签: compiler-construction interpreter


    【解决方案1】:

    我们说编译器的作用域是静态的,而解释器的作用域是动态的

    这不是真的。一种语言是动态范围还是静态范围是语言的属性,而不是实现,并且完全有可能(并且很常见)为静态范围语言编写解释器(或者为动态范围语言编写编译器,但是动态范围的语言不太常见)。

    Scope这个词在这里有什么意义

    变量的范围描述了变量名在程序的哪些部分引用了该变量。因此,如果您在第 23 行定义了一个名为 x 的变量,并在第 42 行定义了另一个名为 x 的变量,然后您在程序中的某处引用了 x,则作用域规则决定这是否引用第 23 行定义的变量, 42 或两者都没有(在这种情况下,您通常会收到类似“变量 x 不在范围内”的错误,具体取决于语言)。

    动态范围意味着函数f 可以看到在调用f 的其他函数中定义的任何变量。这是动态的,因为您无法确定(至少在一般情况下)f(如果有)的哪个定义在程序中给定位置的范围内而不运行它。所以超出范围的错误必须是运行时错误。

    静态作用域(也称为词法作用域)意味着当且仅当变量在周围块中定义时,它才在作用域内。这是一个静态属性,无需运行程序即可轻松检查(除非涉及其他动态功能,例如在运行时定义变量的能力),因此称为“静态范围”。

    为什么编译器是静态的,解释器是动态的

    不是。

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 2010-10-03
      • 2011-01-26
      • 2014-08-10
      • 2011-03-26
      • 2016-11-24
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多