Note: The experimental features of Nim are covered here.

    Note: Assignments, moves and destruction are specified in the document.

    To learn how to compile Nim programs and generate documentation see Compiler User Guide and .

    The language constructs are explained using an extended BNF, in which (a)* means 0 or more a’s, a+ means 1 or more a’s, and (a)? means an optional a. Parentheses may be used to group elements.

    The |, / symbols are used to mark alternatives and have the lowest precedence. / is the ordered choice that requires the parser to try the alternatives in the given order. / is often used to ensure the grammar is not ambiguous.

    Non-terminals start with a lowercase letter, abstract terminal symbols are in UPPERCASE. Verbatim terminal symbols (including keywords) are quoted with ‘. An example:

    Other parts of Nim, like scoping rules or runtime semantics, are described informally.