anchor.diff:              !& "{" .>>. number .>> "," .>>. number .>> "}" => between
               empty =% id
           ]
  +        let miscLiterals = [
  +            singleChar
  +            predefinedSet; notPredefinedSet
  +            category; notCategory
  +            oneOfCharacters; notOneOfCharacters
  +            oneOfRange; notOneOfRange
  +        ]
           let regexItem = "Regex item" ||= [
               !& "." =% any
               !& "\d" =% chars Number
  
positive.code:     let number = Terminals.genericUnsigned<int> "Number"
      let singleChar =
          terminal "Single Character" (T(fun _ data -> char data.[0])) any
      let predefinedSet =
          char '{' <&> plus any <&> char '}'
          |> terminal "Predefined set" (T(fun _ data ->
              let name = data.Slice(1, data.Length - 2).Trim().ToString()
              match allPredefinedSets.TryGetValue(name) with
              | true, set -> chars set
              | false, _ -> errorf "Cannot found a predefined set named %s." name))
      let oneOfCharacters =
          concat [char '['; plus escapedChar; char ']']
          |> terminal "Character set" (T(fun _ data ->
  
negative.code:             !& "\S" =% allButChars Whitespace
              !& "''" =% char '\''
              !@ literalString => string
              yield! List.map (fun x -> !@ x => id) miscLiterals
              !& "(" .>>. regex .>> ")" => id
          ]
          "Regex quantified" ||= [!@ regexItem .>>. quantifier => (|>)]
  