Authors: Andreas Rumpf, Zahary Karadjov
Version: 0.20.0

"复杂度"很像"能量": 你可以将它从最终用户转移到一个或多个其他玩家,但总量对于给定的任务保持不变。— Ran

关于本文

注意 : 这份文件是草案,Nim的一些功能可能需要更精确的措辞。本手册不断发展为合适的规范。

注意 : Nim的实验特性在 这里

本文描述Nim语言的词汇、语法,和语义。

学习如何编译Nim程序和生成文档见 Compiler User GuideDocGen Tools Guide

语言构造用扩展巴科斯范式(BNF)解释,其中 (a)* 表示 0 或者更多 a, a+ 表示1或更多 a, 以及 (a)? 表示可选 a 。小括号用来对元素进行分组。

& 是先行操作符; &a 表示需要 a 但不被消耗。它将在下列规则中消耗。

|, / 符号用于标记可选并且优先级最低。 / 是要求解析器尝试给定顺序的可选项的有序选择。 / 常用于确保语法没有歧义。

非终端符以小写字母开始,抽象终端符用大写。

逐字终端符(包括关键字)用 ' 引用。示例:

  1. ifStmt = 'if' expr ':' stmts ('elif' expr ':' stmts)* ('else' stmts)?

二元操作符 ^ 用于由第二个实参分隔的0或多次出现的简写;不像 ^+ 表示1或多个出现: a ^+ ba (b a) 的简写 a ^ b(a (b a))? 的简写。示例:

  1. arrayConstructor = '[' expr ^* ',' ']'

Nim的其他部分,如作用域规则或运行时语义,都是非正式描述的。