Authors: | Andreas Rumpf, Zahary Karadjov |
---|---|
Version: | 0.20.0 |
"复杂度"很像"能量": 你可以将它从最终用户转移到一个或多个其他玩家,但总量对于给定的任务保持不变。— Ran
关于本文
注意 : 这份文件是草案,Nim的一些功能可能需要更精确的措辞。本手册不断发展为合适的规范。
注意 : Nim的实验特性在 这里 。
本文描述Nim语言的词汇、语法,和语义。
学习如何编译Nim程序和生成文档见 Compiler User Guide 和 DocGen Tools Guide 。
语言构造用扩展巴科斯范式(BNF)解释,其中 (a)* 表示 0 或者更多 a, a+ 表示1或更多 a, 以及 (a)? 表示可选 a 。小括号用来对元素进行分组。
& 是先行操作符; &a 表示需要 a 但不被消耗。它将在下列规则中消耗。
|, / 符号用于标记可选并且优先级最低。 / 是要求解析器尝试给定顺序的可选项的有序选择。 / 常用于确保语法没有歧义。
非终端符以小写字母开始,抽象终端符用大写。
逐字终端符(包括关键字)用 ' 引用。示例:
- ifStmt = 'if' expr ':' stmts ('elif' expr ':' stmts)* ('else' stmts)?
二元操作符 ^ 用于由第二个实参分隔的0或多次出现的简写;不像 ^+ 表示1或多个出现: a ^+ b 是 a (b a) 的简写 a ^ b 是 (a (b a))? 的简写。示例:
- arrayConstructor = '[' expr ^* ',' ']'
Nim的其他部分,如作用域规则或运行时语义,都是非正式描述的。