定义

    声明适用的程序区域叫做 作用域 。作用域可以嵌套。 标识符的含义由声明标识符的最小封闭范围确定,除非重载解析规则另有说明。

    表达式指定生成值或位置的计算。产生位置的表达式叫 左值 。左值可以表示位置或位置包含的值,具体取决于上下文。

    在典型的Nim程序中,多数代码编译成可执行文件。 但是,某些代码可以在 编译期 执行 。 这可以包括宏定义使用的常量表达式,宏定义,和Nim过程。 编译期支持大部分Nim语言,但有一些限制 — 详见 。 我们用术语 进行时 来涵盖可执行文件中的编译时执行和代码执行。

    编译器把Nim源代码解析为称为 抽象语法树 (AST) 的内部数据结构 。 然后,在执行代码或编译成可执行文件前,通过 语义分析 变换AST。 这会添加语义信息,诸如表达式类型、标识符含义,以及某些情况下的表达式值。 语义分析期间的错误叫做 静态错误 。 未另行指定时,本手册中描述的错误是静态错误。

    运行时检查错误 是实现在运行时检查并报告的错误。 报错此类错误的方法是通过 引发异常以致命错误退出 。 但是,该实现提供了禁用这些 运行时检查 的方法 . 有关详细信息,请参阅 pragmas 部分。

    未经检查的运行时错误 是一个不能保证被检测到的错误,并且可能导致任意的计算后续行为。 如果仅使用 safe 语言功能并且未禁用运行时检查,则不会发生未经检查的运行时错误。

    常量表达式 是一个表达式,其值可以在出现的代码的语义分析期间计算。 它不是左值也没有副作用。 常量表达式不仅限于语义分析的功能,例如常量折叠;他们可以使用编译时执行所支持的所有Nim语言功能。 由于常量表达式可以用作语义分析的输入(例如用于定义数组边界),因此这种灵活性要求编译器交错语义分析和编译时代码执行。

    在源代码中从上到下和从左到右进行图像语义分析是非常准确的,在必要时交错编译时代码执行以计算后续语义分析所需的值。 我们将在本文档后面看到,宏调用不仅需要这种交错,而且还会产生语义分析不能完全从上到下,从左到右进行的情况。