           symbol ws+
           "\\(=>\\)" ws+ symbols-to-semicolon))
 
+(defconst factor-predicate-regex
+  (concat (syntax-begin '("PREDICATE")) ws+ symbol ws+ "\\(<\\)" ws+ symbol))
+
 (defconst factor-group-name-to-face
   #s(hash-table test equal data
                 ("C" 'factor-font-lock-comment

    ,(factor-syntax factor-word-definition-regex '("P" "W"))
    ,(factor-syntax (syntax-and-2-symbols '("ALIAS")) '("P" "W" "W"))
    ,(factor-syntax (syntax-and-1-symbol '("ALIEN" "CHAR" "NAN")) '("P" "CT"))
    (,factor-integer-regex . 'factor-font-lock-number)
    (,factor-float-regex . 'factor-font-lock-number)
    (,factor-ratio-regex . 'factor-font-lock-ratio)

(defconst factor-bad-string-regex
  "\\_<\"[^>]\\([^\"\n]\\|\\\\\"\\)*\n")

(defconst factor-word-starters
  '(":" "::" "GENERIC:" "GENERIC#" "DEFER:" "HOOK:"
    "MACRO:" "MACRO::" "MATH:" "MEMO:" "MEMO::"
    "POSTPONE:" "PRIMITIVE:" "SYNTAX:" "TYPED:" "TYPED::"))

(defconst factor-word-definition-regex
  (concat
   (format "\\_<\\(%s\\)" (regexp-opt factor-word-starters))
   ws+ symbol))

;; [parsing-word] [vocab-word]
