什么是编译器设计中的绑定和绑定时间?

程序元素与特定特征或属性的绑定是从一组可能的属性中选择该属性。在程序组织或处理期间进行此选择的时间被定义为该元素的该属性的绑定时间。编程语言中有多种绑定,绑定时间也多种多样。它还可以在绑定和绑定时间方面涉及程序元素的属性,这些属性通过语言的定义或其执行而保持不变。

绑定时间的类型

有两种类型的绑定时间如下 -

  • 执行时间(运行时) - 在程序执行期间实现了一些绑定。这些包含变量与其值的绑定,以及变量与特定存储区域的绑定。运行时绑定的属性如下 -

    • 进入子程序或块- 在某些语言中,绑定仅限于在执行期间进入子程序或块时出现。

    • 在执行期间的任意点- 某些绑定可以在程序执行期间的任何时候出现。一个例子是通过赋值将变量基本绑定到值,而一些语言(如 LISP、Smalltalk 和 ML)允许名称与存储位置的绑定也出现在程序中的任意点。

  • 翻译时间(编译时间) - 三种不同类型的翻译时间绑定如下-

    • 绑定已由程序员选择- 在编写程序时,程序员有意识地做出一些关于变量名称、变量类型、程序语句结构等选择的决定,这些决定描述了翻译过程中的绑定。语言翻译器使用这些绑定来决定目标代码的最终结构。

    • 翻译器选择的绑定- 一些绑定是由语言翻译器选择的,没有直接的程序员要求。例如,为阶段指定的存储器中数据对象的相关区域通常在程序员不知情或不干预的情况下进行管理。

    • 加载程序选择的绑定- 程序通常包括多个子程序,这些子程序应该组合成一个可执行程序。翻译器通常将变量绑定到每个子程序的存储名称内的地址。应该为该存储分配将实现该程序的物理计算机内的实际地址。