Here is the complete syntax of Prolix 2.1 in extended BNF. As usual in extended BNF, {A} means 0 or more As, and [A] means an optional A.

chunk ::= block

block ::= {stat} {';'}

stat ::= ';' |
    obj {attr exp} |
    Name obj {attr exp} |
    class Name {attr exp} |
    if exp group |
    loop exp group |
    require {Name | LiteralString} |
    skip |
    break

obj ::= '$' Name

attr ::= ':' Name

group ::= '{' block '}'

exp ::= none | Numeral | LiteralString | obj attr | group