关于手册

注意: 当前手册还是草案! Nim的一些功能需要更加准确的描述。手册内容也在不断更新,使其逐渐成为规范。

注意: Nim的实验性功能在这里

注意: 赋值、移动和析构在文档特定的析构部分。

当前手册对 Nim 语言的词法、语法和语义做了描述。

打算学习怎样编译 Nim 程序和生成文档,请阅读用户编译指南文档生成工具指南

Nim语言使用”扩展BNF”来解释结构, (a)* 表示 0 个或多个 a , a+ 表示 1 个或多个 a , (a)? 表示 1 个可选的 a ,圆括号用来分组元素。

& 是预先运算符; &a 表示期望一个 a ,但没有用掉,而在之后的规则中被消耗。

| 和 / 符号用来标记备选项,优先级最低。/ 是有序选择,要求解析器按照给定的顺序来尝试备选项,/ 常用来消除语法二义性。

非终结符号以小写字母开头,抽象终结符号字母全大写,逐字的终结符号(包括关键词)用 ‘ 引起来。例如:

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

二元的 ^* 运算符表示为 0 或更多,由第二个参数做为间隔;^+ 表示 1 或更多。 a ^+ b 是 a (b a)* 的简写, a ^* b 则是 (a (b a)*)? 的简写。 例如:

arrayConstructor = ‘‘ expr ^* ‘,’ ‘

Nim 的其他,如作用域规则或运行时语义,使用非标准的描述。