【发布时间】:2018-02-18 13:47:22
【问题描述】:
我们说编译器的作用域是静态的,而解释器的作用域是动态的,那么这里的作用域是什么意思,为什么编译器是静态的,解释器是动态的?
【问题讨论】:
标签: compiler-construction interpreter
我们说编译器的作用域是静态的,而解释器的作用域是动态的,那么这里的作用域是什么意思,为什么编译器是静态的,解释器是动态的?
【问题讨论】:
标签: compiler-construction interpreter
我们说编译器的作用域是静态的,而解释器的作用域是动态的
这不是真的。一种语言是动态范围还是静态范围是语言的属性,而不是实现,并且完全有可能(并且很常见)为静态范围语言编写解释器(或者为动态范围语言编写编译器,但是动态范围的语言不太常见)。
Scope这个词在这里有什么意义
变量的范围描述了变量名在程序的哪些部分引用了该变量。因此,如果您在第 23 行定义了一个名为 x 的变量,并在第 42 行定义了另一个名为 x 的变量,然后您在程序中的某处引用了 x,则作用域规则决定这是否引用第 23 行定义的变量, 42 或两者都没有(在这种情况下,您通常会收到类似“变量 x 不在范围内”的错误,具体取决于语言)。
动态范围意味着函数f 可以看到在调用f 的其他函数中定义的任何变量。这是动态的,因为您无法确定(至少在一般情况下)f(如果有)的哪个定义在程序中给定位置的范围内而不运行它。所以超出范围的错误必须是运行时错误。
静态作用域(也称为词法作用域)意味着当且仅当变量在周围块中定义时,它才在作用域内。这是一个静态属性,无需运行程序即可轻松检查(除非涉及其他动态功能,例如在运行时定义变量的能力),因此称为“静态范围”。
为什么编译器是静态的,解释器是动态的
不是。
【讨论】: