(BLOCK (VERBATIM-CODE () "QueryExpression   := ZettelList? QueryDirective* SearchExpression ActionExpression?\nZettelList        := (ZID (SPACE+ ZID)*).\nZID               := '0'+ ('1' .. '9'') DIGIT*\n                   | ('1' .. '9') DIGIT*.\nQueryDirective    := ContextDirective\n                   | IdentDirective\n                   | ItemsDirective\n                   | UnlinkedDirective.\nContextDirective  := \"CONTEXT\" (SPACE+ ContextDetail)*.\nContextDetail     := \"FULL\"\n                   | \"BACKWARD\"\n                   | \"FORWARD\"\n                   | \"COST\" SPACE+ PosInt\n                   | \"MAX\" SPACE+ PosInt\n                   | \"MIN\" SPACE+ PosInt.\nIdentDirective    := IDENT.\nItemsDirective    := ITEMS.\nUnlinkedDirective := UNLINKED (SPACE+ PHRASE SPACE+ Word)*.\nSearchExpression  := SearchTerm (SPACE+ SearchTerm)*.\nSearchTerm        := SearchOperator? SearchValue\n                   | SearchKey SearchOperator SearchValue?\n                   | SearchKey ExistOperator\n                   | \"OR\"\n                   | \"RANDOM\"\n                   | \"PICK\" SPACE+ PosInt\n                   | \"ORDER\" SPACE+ (\"REVERSE\" SPACE+)? SearchKey\n                   | \"OFFSET\" SPACE+ PosInt\n                   | \"LIMIT\" SPACE+ PosInt.\nSearchValue       := Word.\nSearchKey         := MetadataKey.\nSearchOperator    := '!'\n                   | ('!')? ('~' | ':' | '[' | '}').\nExistOperator     := '?'\n                   | '!' '?'.\nPosInt            := '0'\n                   | ('1' .. '9') DIGIT*.\nActionExpression  := '|' (Word (SPACE+ Word)*)?\nAction            := Word\n                   | 'KEYS'\n                   | 'N' NO-SPACE*\n                   | 'MAX' PosInt\n                   | 'MIN' PosInt\n                   | 'REDIRECT'\n                   | 'REINDEX'.\nWord              := NO-SPACE NO-SPACE*"))