anchor.diff:     (1 :TUPLE-DISPLAY              :documentation "Tuple")
      (1 :RECORD-DISPLAY             :documentation "Record")
      (1 :SEQUENTIAL-EXPRESSION      :documentation "Sequence of expressions")
  -   (1 :LIST-DISPLAY               :documentation "List")
      (1 :STRUCTOR                   :documentation "Project, Embed, etc.")
      (1 :PARENTHESIZED-EXPRESSION   :documentation "Parenthesized expression")
      (1 :MONAD-EXPRESSION           :documentation "Monadic expression")
  
positive.code:    )
    1)
  
  ;;;  UNQUALIFIED-OP-REF is outside SELECTABLE-EXPRESSION to avoid ambiguity with "A.B.C"
  ;;;   being both SELECT (C, TWO-NAME-EXPRESSION (A,B))
  ;;;          and SELECT (C, SELECT (B, UNQUALIFIED-OP-REF A))
  ;;;  "X . SELECTOR" will be parsed as TWO-NAME-EXPRESSION and be disambiguated in post-processing
  (define-sw-parser-rule :CLOSED-EXPRESSION ()
    (:anyof
     (1 :BUILT-IN-OPERATOR      :documentation "&&, ||, =>, <=>, =, ~=, <<")
     (1 :UNQUALIFIED-OP-REF     :documentation "Op reference or Variable reference")
     (1 :SELECTABLE-EXPRESSION  :documentation "Closed expression -- unambiguous termination")
     (1 :RESTRICTION            :documentation "restrict p e -or- (restrict p) e") ; new, per task 22
     )
    1)
  
negative.code: ;;;         Select (B, OpRef (Qualified (unqualified, A)))
  ;;;         Select (B, VarRef A)
  ;;;        So we parse as TWO-NAME-EXPRESSION and resolve in post-processing.
  
  (define-sw-parser-rule :SELECTABLE-EXPRESSION ()
    (:anyof
     (1 :TWO-NAME-EXPRESSION        :documentation "Reference to op or var, or selection")  ; resolve in post-processing  (name     . name)
     ;; (1 :QUALIFIED-OP-REF        :documentation "Qualified reference to op")             ; see TWO-NAME-EXPRESSION
     (1 :NAT-FIELD-SELECTION        :documentation "Selection from name using Nat")         ; see TWO-NAME-EXPRESSION     (name     . nat)
  