(in-package :clang-tool)
(defparameter *node-matcher-rules* 
'((:CXXBASE-SPECIFIER :CXXBASE-SPECIFIER :CXXBASE-SPECIFIER)
  (:CXXCTOR-INITIALIZER :CXXCTOR-INITIALIZER :CXXCTOR-INITIALIZER)
  (:DECL :ACCESS-SPEC-DECL :ACCESS-SPEC-DECL)
  (:DECL :BINDING-DECL :BINDING-DECL) (:DECL :BLOCK-DECL :BLOCK-DECL)
  (:DECL :CLASS-TEMPLATE-DECL :CLASS-TEMPLATE-DECL)
  (:DECL :CLASS-TEMPLATE-PARTIAL-SPECIALIZATION-DECL
   :CLASS-TEMPLATE-PARTIAL-SPECIALIZATION-DECL)
  (:DECL :CLASS-TEMPLATE-SPECIALIZATION-DECL
   :CLASS-TEMPLATE-SPECIALIZATION-DECL)
  (:DECL :CXXCONSTRUCTOR-DECL :CXXCONSTRUCTOR-DECL)
  (:DECL :CXXCONVERSION-DECL :CXXCONVERSION-DECL)
  (:DECL :CXXDEDUCTION-GUIDE-DECL :CXXDEDUCTION-GUIDE-DECL)
  (:DECL :CXXDESTRUCTOR-DECL :CXXDESTRUCTOR-DECL)
  (:DECL :CXXMETHOD-DECL :CXXMETHOD-DECL)
  (:DECL :CXXRECORD-DECL :CXXRECORD-DECL) (:DECL :DECL :DECL)
  (:DECL :DECLARATOR-DECL :DECLARATOR-DECL)
  (:DECL :DECOMPOSITION-DECL :DECOMPOSITION-DECL)
  (:DECL :ENUM-CONSTANT-DECL :ENUM-CONSTANT-DECL) (:DECL :ENUM-DECL :ENUM-DECL)
  (:DECL :FIELD-DECL :FIELD-DECL) (:DECL :FRIEND-DECL :FRIEND-DECL)
  (:DECL :FUNCTION-DECL :FUNCTION-DECL)
  (:DECL :FUNCTION-TEMPLATE-DECL :FUNCTION-TEMPLATE-DECL)
  (:DECL :INDIRECT-FIELD-DECL :INDIRECT-FIELD-DECL)
  (:DECL :LABEL-DECL :LABEL-DECL) (:DECL :LINKAGE-SPEC-DECL :LINKAGE-SPEC-DECL)
  (:DECL :NAMED-DECL :NAMED-DECL)
  (:DECL :NAMESPACE-ALIAS-DECL :NAMESPACE-ALIAS-DECL)
  (:DECL :NAMESPACE-DECL :NAMESPACE-DECL)
  (:DECL :NON-TYPE-TEMPLATE-PARM-DECL :NON-TYPE-TEMPLATE-PARM-DECL)
  (:DECL :OBJC-CATEGORY-DECL :OBJ-CCATEGORY-DECL)
  (:DECL :OBJC-CATEGORY-IMPL-DECL :OBJ-CCATEGORY-IMPL-DECL)
  (:DECL :OBJC-IMPLEMENTATION-DECL :OBJ-CIMPLEMENTATION-DECL)
  (:DECL :OBJC-INTERFACE-DECL :OBJ-CINTERFACE-DECL)
  (:DECL :OBJC-IVAR-DECL :OBJ-CIVAR-DECL)
  (:DECL :OBJC-METHOD-DECL :OBJ-CMETHOD-DECL)
  (:DECL :OBJC-PROPERTY-DECL :OBJ-CPROPERTY-DECL)
  (:DECL :OBJC-PROTOCOL-DECL :OBJ-CPROTOCOL-DECL)
  (:DECL :PARM-VAR-DECL :PARM-VAR-DECL) (:DECL :RECORD-DECL :RECORD-DECL)
  (:DECL :STATIC-ASSERT-DECL :STATIC-ASSERT-DECL) (:DECL :TAG-DECL :TAG-DECL)
  (:DECL :TEMPLATE-TEMPLATE-PARM-DECL :TEMPLATE-TEMPLATE-PARM-DECL)
  (:DECL :TEMPLATE-TYPE-PARM-DECL :TEMPLATE-TYPE-PARM-DECL)
  (:DECL :TRANSLATION-UNIT-DECL :TRANSLATION-UNIT-DECL)
  (:DECL :TYPE-ALIAS-DECL :TYPE-ALIAS-DECL)
  (:DECL :TYPE-ALIAS-TEMPLATE-DECL :TYPE-ALIAS-TEMPLATE-DECL)
  (:DECL :TYPEDEF-DECL :TYPEDEF-DECL)
  (:DECL :TYPEDEF-NAME-DECL :TYPEDEF-NAME-DECL)
  (:DECL :UNRESOLVED-USING-TYPENAME-DECL :UNRESOLVED-USING-TYPENAME-DECL)
  (:DECL :UNRESOLVED-USING-VALUE-DECL :UNRESOLVED-USING-VALUE-DECL)
  (:DECL :USING-DECL :USING-DECL)
  (:DECL :USING-DIRECTIVE-DECL :USING-DIRECTIVE-DECL)
  (:DECL :VALUE-DECL :VALUE-DECL) (:DECL :VAR-DECL :VAR-DECL)
  (:NESTED-NAME-SPECIFIER-LOC :NESTED-NAME-SPECIFIER-LOC
   :NESTED-NAME-SPECIFIER-LOC)
  (:NESTED-NAME-SPECIFIER :NESTED-NAME-SPECIFIER :NESTED-NAME-SPECIFIER)
  (:OMPCLAUSE :OMP-DEFAULT-CLAUSE :OMPDEFAULT-CLAUSE)
  (:QUAL-TYPE :QUAL-TYPE :QUAL-TYPE) (:STMT :ADDR-LABEL-EXPR :ADDR-LABEL-EXPR)
  (:STMT :ARRAY-SUBSCRIPT-EXPR :ARRAY-SUBSCRIPT-EXPR)
  (:STMT :ASM-STMT :ASM-STMT) (:STMT :ATOMIC-EXPR :ATOMIC-EXPR)
  (:STMT :AUTORELEASE-POOL-STMT :OBJ-CAUTORELEASE-POOL-STMT)
  (:STMT :BINARY-CONDITIONAL-OPERATOR :BINARY-CONDITIONAL-OPERATOR)
  (:STMT :BINARY-OPERATOR :BINARY-OPERATOR) (:STMT :BLOCK-EXPR :BLOCK-EXPR)
  (:STMT :BREAK-STMT :BREAK-STMT) (:STMT :C-STYLE-CAST-EXPR :CSTYLE-CAST-EXPR)
  (:STMT :CALL-EXPR :CALL-EXPR) (:STMT :CASE-STMT :CASE-STMT)
  (:STMT :CAST-EXPR :CAST-EXPR) (:STMT :CHARACTER-LITERAL :CHARACTER-LITERAL)
  (:STMT :CHOOSE-EXPR :CHOOSE-EXPR) (:STMT :COAWAIT-EXPR :COAWAIT-EXPR)
  (:STMT :COMPOUND-LITERAL-EXPR :COMPOUND-LITERAL-EXPR)
  (:STMT :COMPOUND-STMT :COMPOUND-STMT)
  (:STMT :CONDITIONAL-OPERATOR :CONDITIONAL-OPERATOR)
  (:STMT :CONSTANT-EXPR :CONSTANT-EXPR) (:STMT :CONTINUE-STMT :CONTINUE-STMT)
  (:STMT :CORETURN-STMT :CORETURN-STMT) (:STMT :COYIELD-EXPR :COYIELD-EXPR)
  (:STMT :CUDAKERNEL-CALL-EXPR :CUDAKERNEL-CALL-EXPR)
  (:STMT :CXXBIND-TEMPORARY-EXPR :CXXBIND-TEMPORARY-EXPR)
  (:STMT :CXXBOOL-LITERAL :CXXBOOL-LITERAL-EXPR)
  (:STMT :CXXCATCH-STMT :CXXCATCH-STMT)
  (:STMT :CXXCONST-CAST-EXPR :CXXCONST-CAST-EXPR)
  (:STMT :CXXCONSTRUCT-EXPR :CXXCONSTRUCT-EXPR)
  (:STMT :CXXDEFAULT-ARG-EXPR :CXXDEFAULT-ARG-EXPR)
  (:STMT :CXXDELETE-EXPR :CXXDELETE-EXPR)
  (:STMT :CXXDEPENDENT-SCOPE-MEMBER-EXPR :CXXDEPENDENT-SCOPE-MEMBER-EXPR)
  (:STMT :CXXDYNAMIC-CAST-EXPR :CXXDYNAMIC-CAST-EXPR)
  (:STMT :CXXFOR-RANGE-STMT :CXXFOR-RANGE-STMT)
  (:STMT :CXXFUNCTIONAL-CAST-EXPR :CXXFUNCTIONAL-CAST-EXPR)
  (:STMT :CXXMEMBER-CALL-EXPR :CXXMEMBER-CALL-EXPR)
  (:STMT :CXXNEW-EXPR :CXXNEW-EXPR) (:STMT :CXXNOEXCEPT-EXPR :CXXNOEXCEPT-EXPR)
  (:STMT :CXXNULL-PTR-LITERAL-EXPR :CXXNULL-PTR-LITERAL-EXPR)
  (:STMT :CXXOPERATOR-CALL-EXPR :CXXOPERATOR-CALL-EXPR)
  (:STMT :CXXREINTERPRET-CAST-EXPR :CXXREINTERPRET-CAST-EXPR)
  (:STMT :CXXREWRITTEN-BINARY-OPERATOR :CXXREWRITTEN-BINARY-OPERATOR)
  (:STMT :CXXSTATIC-CAST-EXPR :CXXSTATIC-CAST-EXPR)
  (:STMT :CXXSTD-INITIALIZER-LIST-EXPR :CXXSTD-INITIALIZER-LIST-EXPR)
  (:STMT :CXXTEMPORARY-OBJECT-EXPR :CXXTEMPORARY-OBJECT-EXPR)
  (:STMT :CXXTHIS-EXPR :CXXTHIS-EXPR) (:STMT :CXXTHROW-EXPR :CXXTHROW-EXPR)
  (:STMT :CXXTRY-STMT :CXXTRY-STMT)
  (:STMT :CXXUNRESOLVED-CONSTRUCT-EXPR :CXXUNRESOLVED-CONSTRUCT-EXPR)
  (:STMT :DECL-REF-EXPR :DECL-REF-EXPR) (:STMT :DECL-STMT :DECL-STMT)
  (:STMT :DEFAULT-STMT :DEFAULT-STMT)
  (:STMT :DEPENDENT-COAWAIT-EXPR :DEPENDENT-COAWAIT-EXPR)
  (:STMT :DESIGNATED-INIT-EXPR :DESIGNATED-INIT-EXPR) (:STMT :DO-STMT :DO-STMT)
  (:STMT :EXPLICIT-CAST-EXPR :EXPLICIT-CAST-EXPR) (:STMT :EXPR :EXPR)
  (:STMT :EXPR-WITH-CLEANUPS :EXPR-WITH-CLEANUPS)
  (:STMT :FIXED-POINT-LITERAL :FIXED-POINT-LITERAL)
  (:STMT :FLOAT-LITERAL :FLOATING-LITERAL) (:STMT :FOR-STMT :FOR-STMT)
  (:STMT :GENERIC-SELECTION-EXPR :GENERIC-SELECTION-EXPR)
  (:STMT :GNU-NULL-EXPR :GNUNULL-EXPR) (:STMT :GOTO-STMT :GOTO-STMT)
  (:STMT :IF-STMT :IF-STMT) (:STMT :IMAGINARY-LITERAL :IMAGINARY-LITERAL)
  (:STMT :IMPLICIT-CAST-EXPR :IMPLICIT-CAST-EXPR)
  (:STMT :IMPLICIT-VALUE-INIT-EXPR :IMPLICIT-VALUE-INIT-EXPR)
  (:STMT :INIT-LIST-EXPR :INIT-LIST-EXPR)
  (:STMT :INTEGER-LITERAL :INTEGER-LITERAL) (:STMT :LABEL-STMT :LABEL-STMT)
  (:STMT :LAMBDA-EXPR :LAMBDA-EXPR)
  (:STMT :MATERIALIZE-TEMPORARY-EXPR :MATERIALIZE-TEMPORARY-EXPR)
  (:STMT :MEMBER-EXPR :MEMBER-EXPR) (:STMT :NULL-STMT :NULL-STMT)
  (:STMT :OBJC-CATCH-STMT :OBJ-CAT-CATCH-STMT)
  (:STMT :OBJC-FINALLY-STMT :OBJ-CAT-FINALLY-STMT)
  (:STMT :OBJC-IVAR-REF-EXPR :OBJ-CIVAR-REF-EXPR)
  (:STMT :OBJC-MESSAGE-EXPR :OBJ-CMESSAGE-EXPR)
  (:STMT :OBJC-THROW-STMT :OBJ-CAT-THROW-STMT)
  (:STMT :OBJC-TRY-STMT :OBJ-CAT-TRY-STMT)
  (:STMT :OMP-EXECUTABLE-DIRECTIVE :OMPEXECUTABLE-DIRECTIVE)
  (:STMT :OPAQUE-VALUE-EXPR :OPAQUE-VALUE-EXPR) (:STMT :PAREN-EXPR :PAREN-EXPR)
  (:STMT :PAREN-LIST-EXPR :PAREN-LIST-EXPR)
  (:STMT :PREDEFINED-EXPR :PREDEFINED-EXPR) (:STMT :RETURN-STMT :RETURN-STMT)
  (:STMT :STMT :STMT) (:STMT :STMT-EXPR :STMT-EXPR)
  (:STMT :STRING-LITERAL :STRING-LITERAL)
  (:STMT :SUBST-NON-TYPE-TEMPLATE-PARM-EXPR :SUBST-NON-TYPE-TEMPLATE-PARM-EXPR)
  (:STMT :SWITCH-CASE :SWITCH-CASE) (:STMT :SWITCH-STMT :SWITCH-STMT)
  (:STMT :UNARY-EXPR-OR-TYPE-TRAIT-EXPR :UNARY-EXPR-OR-TYPE-TRAIT-EXPR)
  (:STMT :UNARY-OPERATOR :UNARY-OPERATOR)
  (:STMT :UNRESOLVED-LOOKUP-EXPR :UNRESOLVED-LOOKUP-EXPR)
  (:STMT :UNRESOLVED-MEMBER-EXPR :UNRESOLVED-MEMBER-EXPR)
  (:STMT :USER-DEFINED-LITERAL :USER-DEFINED-LITERAL)
  (:STMT :WHILE-STMT :WHILE-STMT)
  (:TEMPLATE-ARGUMENT-LOC :TEMPLATE-ARGUMENT-LOC :TEMPLATE-ARGUMENT-LOC)
  (:TEMPLATE-ARGUMENT :TEMPLATE-ARGUMENT :TEMPLATE-ARGUMENT)
  (:TEMPLATE-NAME :TEMPLATE-NAME :TEMPLATE-NAME)
  (:TYPE-LOC :TYPE-LOC :TYPE-LOC) (:TYPE :ARRAY-TYPE :ARRAY-TYPE)
  (:TYPE :ATOMIC-TYPE :ATOMIC-TYPE) (:TYPE :AUTO-TYPE :AUTO-TYPE)
  (:TYPE :BLOCK-POINTER-TYPE :BLOCK-POINTER-TYPE)
  (:TYPE :BUILTIN-TYPE :BUILTIN-TYPE) (:TYPE :COMPLEX-TYPE :COMPLEX-TYPE)
  (:TYPE :CONSTANT-ARRAY-TYPE :CONSTANT-ARRAY-TYPE)
  (:TYPE :DECAYED-TYPE :DECAYED-TYPE) (:TYPE :DECLTYPE-TYPE :DECLTYPE-TYPE)
  (:TYPE :DEDUCED-TEMPLATE-SPECIALIZATION-TYPE
   :DEDUCED-TEMPLATE-SPECIALIZATION-TYPE)
  (:TYPE :DEPENDENT-SIZED-ARRAY-TYPE :DEPENDENT-SIZED-ARRAY-TYPE)
  (:TYPE :ELABORATED-TYPE :ELABORATED-TYPE) (:TYPE :ENUM-TYPE :ENUM-TYPE)
  (:TYPE :FUNCTION-PROTO-TYPE :FUNCTION-PROTO-TYPE)
  (:TYPE :FUNCTION-TYPE :FUNCTION-TYPE)
  (:TYPE :INCOMPLETE-ARRAY-TYPE :INCOMPLETE-ARRAY-TYPE)
  (:TYPE :INJECTED-CLASS-NAME-TYPE :INJECTED-CLASS-NAME-TYPE)
  (:TYPE :L-VALUE-REFERENCE-TYPE :LVALUE-REFERENCE-TYPE)
  (:TYPE :MEMBER-POINTER-TYPE :MEMBER-POINTER-TYPE)
  (:TYPE :OBJC-OBJECT-POINTER-TYPE :OBJ-COBJECT-POINTER-TYPE)
  (:TYPE :PAREN-TYPE :PAREN-TYPE) (:TYPE :POINTER-TYPE :POINTER-TYPE)
  (:TYPE :RVALUE-REFERENCE-TYPE :RVALUE-REFERENCE-TYPE)
  (:TYPE :RECORD-TYPE :RECORD-TYPE) (:TYPE :REFERENCE-TYPE :REFERENCE-TYPE)
  (:TYPE :SUBST-TEMPLATE-TYPE-PARM-TYPE :SUBST-TEMPLATE-TYPE-PARM-TYPE)
  (:TYPE :TAG-TYPE :TAG-TYPE)
  (:TYPE :TEMPLATE-SPECIALIZATION-TYPE :TEMPLATE-SPECIALIZATION-TYPE)
  (:TYPE :TEMPLATE-TYPE-PARM-TYPE :TEMPLATE-TYPE-PARM-TYPE) (:TYPE :TYPE :TYPE)
  (:TYPE :TYPEDEF-TYPE :TYPEDEF-TYPE)
  (:TYPE :UNARY-TRANSFORM-TYPE :UNARY-TRANSFORM-TYPE)
  (:TYPE :VARIABLE-ARRAY-TYPE :VARIABLE-ARRAY-TYPE)))
(defparameter *narrowing-matcher-rules* 
'((:VAR-DECL :IS-TEMPLATE-INSTANTIATION) (:VAR-DECL :IS-STATIC-STORAGE-CLASS)
  (:VAR-DECL :IS-STATIC-LOCAL) (:VAR-DECL :IS-EXTERN-C)
  (:VAR-DECL :IS-EXPLICIT-TEMPLATE-SPECIALIZATION)
  (:VAR-DECL :IS-EXCEPTION-VARIABLE) (:VAR-DECL :IS-DEFINITION)
  (:VAR-DECL :IS-CONSTEXPR) (:VAR-DECL :HAS-THREAD-STORAGE-DURATION)
  (:VAR-DECL :HAS-STATIC-STORAGE-DURATION) (:VAR-DECL :HAS-LOCAL-STORAGE)
  (:VAR-DECL :HAS-GLOBAL-STORAGE) (:VAR-DECL :HAS-AUTOMATIC-STORAGE-DURATION)
  (:UNRESOLVED-MEMBER-EXPR :IS-ARROW)
  (:UNARY-OPERATOR :HAS-OPERATOR-NAME :STRING-NAME)
  (:UNARY-OPERATOR :HAS-ANY-OPERATOR-NAME :STRINGREF-ELLIPSIS :STRINGREF-NIL)
  (:UNARY-EXPR-OR-TYPE-TRAIT-EXPR :OF-KIND :UNARY-EXPR-OR-TYPE-TRAIT-KIND)
  (:TYPE :VOID-TYPE) (:TYPE :REAL-FLOATING-POINT-TYPE)
  (:TYPE :EQUALS-NODE :TYPE*-OTHER) (:TYPE :EQUALS-BOUND-NODE :STRING-ID)
  (:TYPE :BOOLEAN-TYPE) (:TYPE-LOC :IS-EXPANSION-IN-SYSTEM-HEADER)
  (:TYPE-LOC :IS-EXPANSION-IN-MAIN-FILE)
  (:TYPE-LOC :IS-EXPANSION-IN-FILE-MATCHING :STRINGREF-REGEXP
   :REGEX__REGEXFLAGS-FLAGS :=-NOFLAGS)
  (:TYPE-LOC :IS-EXPANDED-FROM-MACRO :STRING-MACRONAME)
  (:TEMPLATE-SPECIALIZATION-TYPE :TEMPLATE-ARGUMENT-COUNT-IS :UNSIGNED-N)
  (:TEMPLATE-ARGUMENT :IS-INTEGRAL)
  (:TEMPLATE-ARGUMENT :EQUALS-INTEGRAL-VALUE :STRING-VALUE)
  (:TAG-DECL :IS-UNION) (:TAG-DECL :IS-STRUCT) (:TAG-DECL :IS-ENUM)
  (:TAG-DECL :IS-DEFINITION) (:TAG-DECL :IS-CLASS)
  (:STRING-LITERAL :HAS-SIZE :UNSIGNED-N) (:STMT :IS-IN-TEMPLATE-INSTANTIATION)
  (:STMT :IS-EXPANSION-IN-SYSTEM-HEADER) (:STMT :IS-EXPANSION-IN-MAIN-FILE)
  (:STMT :IS-EXPANSION-IN-FILE-MATCHING :STRINGREF-REGEXP
   :REGEX__REGEXFLAGS-FLAGS :=-NOFLAGS)
  (:STMT :IS-EXPANDED-FROM-MACRO :STRING-MACRONAME)
  (:STMT :EQUALS-NODE :STMT*-OTHER) (:STMT :EQUALS-BOUND-NODE :STRING-ID)
  (:QUAL-TYPE :IS-VOLATILE-QUALIFIED) (:QUAL-TYPE :IS-UNSIGNED-INTEGER)
  (:QUAL-TYPE :IS-SIGNED-INTEGER) (:QUAL-TYPE :IS-INTEGER)
  (:QUAL-TYPE :IS-CONST-QUALIFIED) (:QUAL-TYPE :IS-ANY-POINTER)
  (:QUAL-TYPE :IS-ANY-CHARACTER) (:QUAL-TYPE :HAS-LOCAL-QUALIFIERS)
  (:QUAL-TYPE :EQUALS-BOUND-NODE :STRING-ID)
  (:QUAL-TYPE :AS-STRING :STRING-NAME)
  (:PARM-VAR-DECL :IS-AT-POSITION :UNSIGNED-N)
  (:PARM-VAR-DECL :HAS-DEFAULT-ARGUMENT)
  (:OBJ-CMETHOD-DECL :IS-INSTANCE-METHOD) (:OBJ-CMETHOD-DECL :IS-DEFINITION)
  (:OBJ-CMETHOD-DECL :IS-CLASS-METHOD)
  (:OBJ-CMESSAGE-EXPR :NUM-SELECTOR-ARGS :UNSIGNED-N)
  (:OBJ-CMESSAGE-EXPR :MATCHES-SELECTOR :STRINGREF-REGEXP
   :REGEX__REGEXFLAGS-FLAGS :=-NOFLAGS)
  (:OBJ-CMESSAGE-EXPR :IS-INSTANCE-MESSAGE)
  (:OBJ-CMESSAGE-EXPR :IS-CLASS-MESSAGE)
  (:OBJ-CMESSAGE-EXPR :HAS-UNARY-SELECTOR)
  (:OBJ-CMESSAGE-EXPR :HAS-SELECTOR :STRING-BASENAME)
  (:OBJ-CMESSAGE-EXPR :HAS-NULL-SELECTOR)
  (:OBJ-CMESSAGE-EXPR :HAS-KEYWORD-SELECTOR)
  (:OBJ-CMESSAGE-EXPR :HAS-ANY-SELECTOR :STRINGREF-ELLIPSIS :STRINGREF-NIL)
  (:OBJ-CMESSAGE-EXPR :ARGUMENT-COUNT-IS :UNSIGNED-N)
  (:OBJ-CINTERFACE-DECL :IS-SAME-OR-DERIVED-FROM :STRING-BASENAME)
  (:OBJ-CINTERFACE-DECL :IS-DIRECTLY-DERIVED-FROM :STRING-BASENAME)
  (:OBJ-CINTERFACE-DECL :IS-DERIVED-FROM :STRING-BASENAME)
  (:OMPEXECUTABLE-DIRECTIVE :IS-STANDALONE-DIRECTIVE)
  (:OMPEXECUTABLE-DIRECTIVE :IS-ALLOWED-TO-CONTAIN-CLAUSE-KIND
   :OPENMPCLAUSEKIND-CKIND)
  (:OMPDEFAULT-CLAUSE :IS-SHARED-KIND) (:OMPDEFAULT-CLAUSE :IS-NONE-KIND)
  (:OMPDEFAULT-CLAUSE :IS-FIRST-PRIVATE-KIND) (:NAMESPACE-DECL :IS-INLINE)
  (:NAMESPACE-DECL :IS-ANONYMOUS)
  (:NAMED-DECL :MATCHES-NAME :STRINGREF-REGEXP :REGEX__REGEXFLAGS-FLAGS
   :=-NOFLAGS)
  (:NAMED-DECL :HAS-NAME :STRINGREF-NAME)
  (:NAMED-DECL :HAS-EXTERNAL-FORMAL-LINKAGE)
  (:NAMED-DECL :HAS-ANY-NAME :STRINGREF-ELLIPSIS :STRINGREF-NIL)
  (:MEMBER-EXPR :IS-ARROW) (:INTEGER-LITERAL :EQUALS :UNSIGNED-VALUE)
  (:INTEGER-LITERAL :EQUALS :DOUBLE-VALUE)
  (:INTEGER-LITERAL :EQUALS :VALUET-VALUE)
  (:INTEGER-LITERAL :EQUALS :BOOL-VALUE) (:IF-STMT :IS-CONSTEXPR)
  (:FUNCTION-PROTO-TYPE :PARAMETER-COUNT-IS :UNSIGNED-N)
  (:FUNCTION-PROTO-TYPE :IS-NO-THROW)
  (:FUNCTION-PROTO-TYPE :HAS-DYNAMIC-EXCEPTION-SPEC)
  (:FUNCTION-DECL :PARAMETER-COUNT-IS :UNSIGNED-N) (:FUNCTION-DECL :IS-WEAK)
  (:FUNCTION-DECL :IS-VARIADIC) (:FUNCTION-DECL :IS-TEMPLATE-INSTANTIATION)
  (:FUNCTION-DECL :IS-STATIC-STORAGE-CLASS) (:FUNCTION-DECL :IS-NO-THROW)
  (:FUNCTION-DECL :IS-NO-RETURN) (:FUNCTION-DECL :IS-MAIN)
  (:FUNCTION-DECL :IS-INLINE) (:FUNCTION-DECL :IS-EXTERN-C)
  (:FUNCTION-DECL :IS-EXPLICIT-TEMPLATE-SPECIALIZATION)
  (:FUNCTION-DECL :IS-DELETED) (:FUNCTION-DECL :IS-DEFINITION)
  (:FUNCTION-DECL :IS-DEFAULTED) (:FUNCTION-DECL :IS-CONSTEXPR)
  (:FUNCTION-DECL :HAS-TRAILING-RETURN)
  (:FUNCTION-DECL :HAS-OVERLOADED-OPERATOR-NAME :STRINGREF-NAME)
  (:FUNCTION-DECL :HAS-DYNAMIC-EXCEPTION-SPEC)
  (:FUNCTION-DECL :HAS-ANY-OVERLOADED-OPERATOR-NAME :STRINGREF-ELLIPSIS
   :STRINGREF-NIL)
  (:FLOATING-LITERAL :EQUALS :DOUBLE-VALUE)
  (:FLOATING-LITERAL :EQUALS :VALUET-VALUE) (:FIELD-DECL :IS-BIT-FIELD)
  (:FIELD-DECL :HAS-BIT-WIDTH :UNSIGNED-WIDTH) (:EXPR :NULL-POINTER-CONSTANT)
  (:EXPR :IS-VALUE-DEPENDENT) (:EXPR :IS-TYPE-DEPENDENT)
  (:EXPR :IS-INSTANTIATION-DEPENDENT) (:ENUM-DECL :IS-SCOPED)
  (:DESIGNATED-INIT-EXPR :DESIGNATOR-COUNT-IS :UNSIGNED-N) (:DECL :IS-PUBLIC)
  (:DECL :IS-PROTECTED) (:DECL :IS-PRIVATE) (:DECL :IS-INSTANTIATED)
  (:DECL :IS-IN-STD-NAMESPACE) (:DECL :IS-IMPLICIT)
  (:DECL :IS-EXPANSION-IN-SYSTEM-HEADER) (:DECL :IS-EXPANSION-IN-MAIN-FILE)
  (:DECL :IS-EXPANSION-IN-FILE-MATCHING :STRINGREF-REGEXP
   :REGEX__REGEXFLAGS-FLAGS :=-NOFLAGS)
  (:DECL :IS-EXPANDED-FROM-MACRO :STRING-MACRONAME)
  (:DECL :HAS-ATTR :KIND-ATTRKIND) (:DECL :EQUALS-NODE :DECL*-OTHER)
  (:DECL :EQUALS-BOUND-NODE :STRING-ID) (:DECL-STMT :DECL-COUNT-IS :UNSIGNED-N)
  (:CONSTANT-ARRAY-TYPE :HAS-SIZE :UNSIGNED-N)
  (:COMPOUND-STMT :STATEMENT-COUNT-IS :UNSIGNED-N)
  (:CLASS-TEMPLATE-SPECIALIZATION-DECL :TEMPLATE-ARGUMENT-COUNT-IS :UNSIGNED-N)
  (:CHARACTER-LITERAL :EQUALS :UNSIGNED-VALUE)
  (:CHARACTER-LITERAL :EQUALS :DOUBLE-VALUE)
  (:CHARACTER-LITERAL :EQUALS :VALUET-VALUE)
  (:CHARACTER-LITERAL :EQUALS :BOOL-VALUE)
  (:CAST-EXPR :HAS-CAST-KIND :CASTKIND-KIND) (:CALL-EXPR :USES-ADL)
  (:CALL-EXPR :ARGUMENT-COUNT-IS :UNSIGNED-N)
  (:CXXUNRESOLVED-CONSTRUCT-EXPR :ARGUMENT-COUNT-IS :UNSIGNED-N)
  (:CXXREWRITTEN-BINARY-OPERATOR :IS-COMPARISON-OPERATOR)
  (:CXXREWRITTEN-BINARY-OPERATOR :IS-ASSIGNMENT-OPERATOR)
  (:CXXREWRITTEN-BINARY-OPERATOR :HAS-OPERATOR-NAME :STRING-NAME)
  (:CXXREWRITTEN-BINARY-OPERATOR :HAS-ANY-OPERATOR-NAME :STRINGREF-ELLIPSIS
   :STRINGREF-NIL)
  (:CXXRECORD-DECL :IS-TEMPLATE-INSTANTIATION)
  (:CXXRECORD-DECL :IS-SAME-OR-DERIVED-FROM :STRING-BASENAME)
  (:CXXRECORD-DECL :IS-LAMBDA) (:CXXRECORD-DECL :IS-FINAL)
  (:CXXRECORD-DECL :IS-EXPLICIT-TEMPLATE-SPECIALIZATION)
  (:CXXRECORD-DECL :IS-DIRECTLY-DERIVED-FROM :STRING-BASENAME)
  (:CXXRECORD-DECL :IS-DERIVED-FROM :STRING-BASENAME)
  (:CXXRECORD-DECL :HAS-DEFINITION)
  (:CXXOPERATOR-CALL-EXPR :IS-COMPARISON-OPERATOR)
  (:CXXOPERATOR-CALL-EXPR :IS-ASSIGNMENT-OPERATOR)
  (:CXXOPERATOR-CALL-EXPR :HAS-OVERLOADED-OPERATOR-NAME :STRINGREF-NAME)
  (:CXXOPERATOR-CALL-EXPR :HAS-OPERATOR-NAME :STRING-NAME)
  (:CXXOPERATOR-CALL-EXPR :HAS-ANY-OVERLOADED-OPERATOR-NAME :STRINGREF-ELLIPSIS
   :STRINGREF-NIL)
  (:CXXOPERATOR-CALL-EXPR :HAS-ANY-OPERATOR-NAME :STRINGREF-ELLIPSIS
   :STRINGREF-NIL)
  (:CXXNEW-EXPR :IS-ARRAY) (:CXXMETHOD-DECL :IS-VIRTUAL-AS-WRITTEN)
  (:CXXMETHOD-DECL :IS-VIRTUAL) (:CXXMETHOD-DECL :IS-USER-PROVIDED)
  (:CXXMETHOD-DECL :IS-PURE) (:CXXMETHOD-DECL :IS-OVERRIDE)
  (:CXXMETHOD-DECL :IS-MOVE-ASSIGNMENT-OPERATOR) (:CXXMETHOD-DECL :IS-FINAL)
  (:CXXMETHOD-DECL :IS-COPY-ASSIGNMENT-OPERATOR) (:CXXMETHOD-DECL :IS-CONST)
  (:CXXDEPENDENT-SCOPE-MEMBER-EXPR :MEMBER-HAS-SAME-NAME-AS-BOUND-NODE
   :STRING-BINDINGID)
  (:CXXDEPENDENT-SCOPE-MEMBER-EXPR :IS-ARROW)
  (:CXXDEPENDENT-SCOPE-MEMBER-EXPR :HAS-MEMBER-NAME :STRING-N)
  (:CXXDEDUCTION-GUIDE-DECL :IS-EXPLICIT) (:CXXCTOR-INITIALIZER :IS-WRITTEN)
  (:CXXCTOR-INITIALIZER :IS-MEMBER-INITIALIZER)
  (:CXXCTOR-INITIALIZER :IS-BASE-INITIALIZER)
  (:CXXCONVERSION-DECL :IS-EXPLICIT)
  (:CXXCONSTRUCTOR-DECL :IS-MOVE-CONSTRUCTOR)
  (:CXXCONSTRUCTOR-DECL :IS-EXPLICIT)
  (:CXXCONSTRUCTOR-DECL :IS-DELEGATING-CONSTRUCTOR)
  (:CXXCONSTRUCTOR-DECL :IS-DEFAULT-CONSTRUCTOR)
  (:CXXCONSTRUCTOR-DECL :IS-COPY-CONSTRUCTOR)
  (:CXXCONSTRUCT-EXPR :REQUIRES-ZERO-INITIALIZATION)
  (:CXXCONSTRUCT-EXPR :IS-LIST-INITIALIZATION)
  (:CXXCONSTRUCT-EXPR :ARGUMENT-COUNT-IS :UNSIGNED-N)
  (:CXXCATCH-STMT :IS-CATCH-ALL)
  (:CXXBOOL-LITERAL-EXPR :EQUALS :UNSIGNED-VALUE)
  (:CXXBOOL-LITERAL-EXPR :EQUALS :DOUBLE-VALUE)
  (:CXXBOOL-LITERAL-EXPR :EQUALS :VALUET-VALUE)
  (:CXXBOOL-LITERAL-EXPR :EQUALS :BOOL-VALUE) (:CXXBASE-SPECIFIER :IS-VIRTUAL)
  (:CXXBASE-SPECIFIER :IS-PUBLIC) (:CXXBASE-SPECIFIER :IS-PROTECTED)
  (:CXXBASE-SPECIFIER :IS-PRIVATE) (:BINARY-OPERATOR :IS-COMPARISON-OPERATOR)
  (:BINARY-OPERATOR :IS-ASSIGNMENT-OPERATOR)
  (:BINARY-OPERATOR :HAS-OPERATOR-NAME :STRING-NAME)
  (:BINARY-OPERATOR :HAS-ANY-OPERATOR-NAME :STRINGREF-ELLIPSIS :STRINGREF-NIL)
  (:* :UNLESS :*) (:UNSPECIFIED :MAP-ANY-OF :ELLIPSIS) (:* :ANYTHING)
  (:* :ANY-OF :* :ELLIPSIS :*) (:* :ALL-OF :* :ELLIPSIS :*)))
(defparameter *traversal-matcher-rules* 
'((:* :BINARY-OPERATION :* :ELLIPSIS :*) (:* :EACH-OF :* :ELLIPSIS :*)
  (:* :FIND-ALL :*) (:* :FOR-EACH-DESCENDANT :*) (:* :FOR-EACH :*)
  (:* :HAS-ANCESTOR :*) (:* :HAS-DESCENDANT :*) (:* :HAS :*)
  (:* :HAS-PARENT :*) (:* :INVOCATION :* :ELLIPSIS :*) (:* :OPTIONALLY :*)
  (:* :TRAVERSE :*) (:ABSTRACT-CONDITIONAL-OPERATOR :HAS-CONDITION :EXPR)
  (:ABSTRACT-CONDITIONAL-OPERATOR :HAS-FALSE-EXPRESSION :EXPR)
  (:ABSTRACT-CONDITIONAL-OPERATOR :HAS-TRUE-EXPRESSION :EXPR)
  (:ADDR-LABEL-EXPR :HAS-DECLARATION :DECL)
  (:ARRAY-SUBSCRIPT-EXPR :HAS-BASE :EXPR)
  (:ARRAY-SUBSCRIPT-EXPR :HAS-INDEX :EXPR)
  (:ARRAY-SUBSCRIPT-EXPR :HAS-LHS :EXPR) (:ARRAY-SUBSCRIPT-EXPR :HAS-RHS :EXPR)
  (:ARRAY-TYPE :HAS-ELEMENT-TYPE :TYPE) (:ATOMIC-TYPE :HAS-VALUE-TYPE :TYPE)
  (:AUTO-TYPE :HAS-DEDUCED-TYPE :TYPE)
  (:BINARY-OPERATOR :HAS-EITHER-OPERAND :EXPR)
  (:BINARY-OPERATOR :HAS-LHS :EXPR)
  (:BINARY-OPERATOR :HAS-OPERANDS :EXPR :EXPR)
  (:BINARY-OPERATOR :HAS-RHS :EXPR)
  (:BINDING-DECL :FOR-DECOMPOSITION :VALUE-DECL)
  (:BLOCK-DECL :HAS-ANY-PARAMETER :PARM-VAR-DECL)
  (:BLOCK-DECL :HAS-PARAMETER :UNSIGNED-N :PARM-VAR-DECL)
  (:BLOCK-DECL :HAS-TYPE-LOC :TYPE-LOC) (:BLOCK-POINTER-TYPE :POINTEE :TYPE)
  (:CXXBASE-SPECIFIER :HAS-TYPE-LOC :TYPE-LOC)
  (:CXXBASE-SPECIFIER :HAS-TYPE :DECL)
  (:CXXBASE-SPECIFIER :HAS-TYPE :QUAL-TYPE)
  (:CXXCONSTRUCT-EXPR :FOR-EACH-ARGUMENT-WITH-PARAM :EXPR :PARM-VAR-DECL)
  (:CXXCONSTRUCT-EXPR :FOR-EACH-ARGUMENT-WITH-PARAM-TYPE :EXPR :QUAL-TYPE)
  (:CXXCONSTRUCT-EXPR :HAS-ANY-ARGUMENT :EXPR)
  (:CXXCONSTRUCT-EXPR :HAS-ARGUMENT :UNSIGNED-N :EXPR)
  (:CXXCONSTRUCT-EXPR :HAS-DECLARATION :DECL)
  (:CXXCONSTRUCTOR-DECL :FOR-EACH-CONSTRUCTOR-INITIALIZER :CXXCTOR-INITIALIZER)
  (:CXXCONSTRUCTOR-DECL :HAS-ANY-CONSTRUCTOR-INITIALIZER :CXXCTOR-INITIALIZER)
  (:CXXCTOR-INITIALIZER :FOR-FIELD :FIELD-DECL)
  (:CXXCTOR-INITIALIZER :HAS-TYPE-LOC :TYPE-LOC)
  (:CXXCTOR-INITIALIZER :WITH-INITIALIZER :EXPR)
  (:CXXDEPENDENT-SCOPE-MEMBER-EXPR :HAS-OBJECT-EXPRESSION :EXPR)
  (:CXXFOR-RANGE-STMT :HAS-BODY :STMT)
  (:CXXFOR-RANGE-STMT :HAS-INIT-STATEMENT :STMT)
  (:CXXFOR-RANGE-STMT :HAS-LOOP-VARIABLE :VAR-DECL)
  (:CXXFOR-RANGE-STMT :HAS-RANGE-INIT :EXPR)
  (:CXXFUNCTIONAL-CAST-EXPR :HAS-TYPE-LOC :TYPE-LOC)
  (:CXXMEMBER-CALL-EXPR :ON-IMPLICIT-OBJECT-ARGUMENT :EXPR)
  (:CXXMEMBER-CALL-EXPR :ON :EXPR)
  (:CXXMEMBER-CALL-EXPR :THIS-POINTER-TYPE :DECL)
  (:CXXMEMBER-CALL-EXPR :THIS-POINTER-TYPE :QUAL-TYPE)
  (:CXXMETHOD-DECL :FOR-EACH-OVERRIDDEN :CXXMETHOD-DECL)
  (:CXXMETHOD-DECL :OF-CLASS :CXXRECORD-DECL)
  (:CXXNEW-EXPR :HAS-ANY-PLACEMENT-ARG :EXPR)
  (:CXXNEW-EXPR :HAS-ARRAY-SIZE :EXPR) (:CXXNEW-EXPR :HAS-DECLARATION :DECL)
  (:CXXNEW-EXPR :HAS-PLACEMENT-ARG :UNSIGNED-INDEX :EXPR)
  (:CXXNEW-EXPR :HAS-TYPE-LOC :TYPE-LOC)
  (:CXXOPERATOR-CALL-EXPR :HAS-EITHER-OPERAND :EXPR)
  (:CXXOPERATOR-CALL-EXPR :HAS-LHS :EXPR)
  (:CXXOPERATOR-CALL-EXPR :HAS-OPERANDS :EXPR :EXPR)
  (:CXXOPERATOR-CALL-EXPR :HAS-RHS :EXPR)
  (:CXXOPERATOR-CALL-EXPR :HAS-UNARY-OPERAND :EXPR)
  (:CXXRECORD-DECL :HAS-ANY-BASE :CXXBASE-SPECIFIER)
  (:CXXRECORD-DECL :HAS-DIRECT-BASE :CXXBASE-SPECIFIER)
  (:CXXRECORD-DECL :HAS-METHOD :CXXMETHOD-DECL)
  (:CXXRECORD-DECL :IS-DERIVED-FROM :NAMED-DECL)
  (:CXXRECORD-DECL :IS-DIRECTLY-DERIVED-FROM :NAMED-DECL)
  (:CXXRECORD-DECL :IS-SAME-OR-DERIVED-FROM :NAMED-DECL)
  (:CXXREWRITTEN-BINARY-OPERATOR :HAS-EITHER-OPERAND :EXPR)
  (:CXXREWRITTEN-BINARY-OPERATOR :HAS-LHS :EXPR)
  (:CXXREWRITTEN-BINARY-OPERATOR :HAS-OPERANDS :EXPR :EXPR)
  (:CXXREWRITTEN-BINARY-OPERATOR :HAS-RHS :EXPR)
  (:CXXTEMPORARY-OBJECT-EXPR :HAS-TYPE-LOC :TYPE-LOC)
  (:CXXUNRESOLVED-CONSTRUCT-EXPR :HAS-ANY-ARGUMENT :EXPR)
  (:CXXUNRESOLVED-CONSTRUCT-EXPR :HAS-ARGUMENT :UNSIGNED-N :EXPR)
  (:CXXUNRESOLVED-CONSTRUCT-EXPR :HAS-TYPE-LOC :TYPE-LOC)
  (:CALL-EXPR :CALLEE :DECL) (:CALL-EXPR :CALLEE :STMT)
  (:CALL-EXPR :FOR-EACH-ARGUMENT-WITH-PARAM :EXPR :PARM-VAR-DECL)
  (:CALL-EXPR :FOR-EACH-ARGUMENT-WITH-PARAM-TYPE :EXPR :QUAL-TYPE)
  (:CALL-EXPR :HAS-ANY-ARGUMENT :EXPR)
  (:CALL-EXPR :HAS-ARGUMENT :UNSIGNED-N :EXPR)
  (:CALL-EXPR :HAS-DECLARATION :DECL) (:CASE-STMT :HAS-CASE-CONSTANT :EXPR)
  (:CAST-EXPR :HAS-SOURCE-EXPRESSION :EXPR)
  (:CLASS-TEMPLATE-SPECIALIZATION-DECL :HAS-ANY-TEMPLATE-ARGUMENT
   :TEMPLATE-ARGUMENT)
  (:CLASS-TEMPLATE-SPECIALIZATION-DECL :HAS-SPECIALIZED-TEMPLATE
   :CLASS-TEMPLATE-DECL)
  (:CLASS-TEMPLATE-SPECIALIZATION-DECL :HAS-TEMPLATE-ARGUMENT :UNSIGNED-N
   :TEMPLATE-ARGUMENT)
  (:CLASS-TEMPLATE-SPECIALIZATION-DECL :HAS-TYPE-LOC :TYPE-LOC)
  (:COMPLEX-TYPE :HAS-ELEMENT-TYPE :TYPE)
  (:COMPOUND-LITERAL-EXPR :HAS-TYPE-LOC :TYPE-LOC)
  (:COMPOUND-STMT :HAS-ANY-SUBSTATEMENT :STMT)
  (:DECAYED-TYPE :HAS-DECAYED-TYPE :QUAL-TYPE)
  (:DECL-REF-EXPR :HAS-DECLARATION :DECL)
  (:DECL-REF-EXPR :THROUGH-USING-DECL :USING-SHADOW-DECL)
  (:DECL-REF-EXPR :TO :DECL)
  (:DECL-STMT :CONTAINS-DECLARATION :UNSIGNED-N :DECL)
  (:DECL-STMT :HAS-SINGLE-DECL :DECL)
  (:DECLARATOR-DECL :HAS-TYPE-LOC :TYPE-LOC) (:DECL :HAS-DECL-CONTEXT :DECL)
  (:DECLTYPE-TYPE :HAS-UNDERLYING-TYPE :TYPE)
  (:DECOMPOSITION-DECL :HAS-ANY-BINDING :BINDING-DECL)
  (:DECOMPOSITION-DECL :HAS-BINDING :UNSIGNED-N :BINDING-DECL)
  (:DO-STMT :HAS-BODY :STMT) (:DO-STMT :HAS-CONDITION :EXPR)
  (:ELABORATED-TYPE :HAS-QUALIFIER :NESTED-NAME-SPECIFIER)
  (:ELABORATED-TYPE :NAMES-TYPE :QUAL-TYPE) (:ENUM-TYPE :HAS-DECLARATION :DECL)
  (:EXPLICIT-CAST-EXPR :HAS-DESTINATION-TYPE :QUAL-TYPE)
  (:EXPLICIT-CAST-EXPR :HAS-TYPE-LOC :TYPE-LOC) (:EXPR :HAS-TYPE :DECL)
  (:EXPR :HAS-TYPE :QUAL-TYPE)
  (:EXPR :IGNORING-ELIDABLE-CONSTRUCTOR-CALL :EXPR)
  (:EXPR :IGNORING-IMP-CASTS :EXPR) (:EXPR :IGNORING-IMPLICIT :EXPR)
  (:EXPR :IGNORING-PAREN-CASTS :EXPR) (:EXPR :IGNORING-PAREN-IMP-CASTS :EXPR)
  (:EXPR :IGNORING-PARENS :EXPR) (:FIELD-DECL :HAS-IN-CLASS-INITIALIZER :EXPR)
  (:FOR-STMT :HAS-BODY :STMT) (:FOR-STMT :HAS-CONDITION :EXPR)
  (:FOR-STMT :HAS-INCREMENT :STMT) (:FOR-STMT :HAS-LOOP-INIT :STMT)
  (:FRIEND-DECL :HAS-TYPE :DECL) (:FRIEND-DECL :HAS-TYPE :QUAL-TYPE)
  (:FUNCTION-DECL :HAS-ANY-BODY :STMT)
  (:FUNCTION-DECL :HAS-ANY-PARAMETER :PARM-VAR-DECL)
  (:FUNCTION-DECL :HAS-ANY-TEMPLATE-ARGUMENT :TEMPLATE-ARGUMENT)
  (:FUNCTION-DECL :HAS-BODY :STMT)
  (:FUNCTION-DECL :HAS-EXPLICIT-SPECIFIER :EXPR)
  (:FUNCTION-DECL :HAS-PARAMETER :UNSIGNED-N :PARM-VAR-DECL)
  (:FUNCTION-DECL :HAS-TEMPLATE-ARGUMENT :UNSIGNED-N :TEMPLATE-ARGUMENT)
  (:FUNCTION-DECL :RETURNS :QUAL-TYPE) (:IF-STMT :HAS-CONDITION :EXPR)
  (:IF-STMT :HAS-CONDITION-VARIABLE-STATEMENT :DECL-STMT)
  (:IF-STMT :HAS-ELSE :STMT) (:IF-STMT :HAS-INIT-STATEMENT :STMT)
  (:IF-STMT :HAS-THEN :STMT)
  (:IMPLICIT-CAST-EXPR :HAS-IMPLICIT-DESTINATION-TYPE :QUAL-TYPE)
  (:INIT-LIST-EXPR :HAS-INIT :UNSIGNED-N :EXPR)
  (:INIT-LIST-EXPR :HAS-SYNTACTIC-FORM :EXPR)
  (:INJECTED-CLASS-NAME-TYPE :HAS-DECLARATION :DECL)
  (:LABEL-STMT :HAS-DECLARATION :DECL)
  (:LAMBDA-EXPR :HAS-ANY-CAPTURE :CXXTHIS-EXPR)
  (:LAMBDA-EXPR :HAS-ANY-CAPTURE :VAR-DECL)
  (:MEMBER-EXPR :HAS-DECLARATION :DECL)
  (:MEMBER-EXPR :HAS-OBJECT-EXPRESSION :EXPR)
  (:MEMBER-EXPR :MEMBER :VALUE-DECL) (:MEMBER-POINTER-TYPE :POINTEE :TYPE)
  (:NAMED-DECL :HAS-UNDERLYING-DECL :NAMED-DECL)
  (:NESTED-NAME-SPECIFIER-LOC :HAS-PREFIX :NESTED-NAME-SPECIFIER-LOC)
  (:NESTED-NAME-SPECIFIER-LOC :LOC :NESTED-NAME-SPECIFIER)
  (:NESTED-NAME-SPECIFIER-LOC :SPECIFIES-TYPE-LOC :TYPE-LOC)
  (:NESTED-NAME-SPECIFIER :HAS-PREFIX :NESTED-NAME-SPECIFIER)
  (:NESTED-NAME-SPECIFIER :SPECIFIES-NAMESPACE :NAMESPACE-DECL)
  (:NESTED-NAME-SPECIFIER :SPECIFIES-TYPE :QUAL-TYPE)
  (:OMPEXECUTABLE-DIRECTIVE :HAS-ANY-CLAUSE :OMPCLAUSE)
  (:OMPEXECUTABLE-DIRECTIVE :HAS-STRUCTURED-BLOCK :STMT)
  (:OBJ-CINTERFACE-DECL :IS-DERIVED-FROM :NAMED-DECL)
  (:OBJ-CINTERFACE-DECL :IS-DIRECTLY-DERIVED-FROM :NAMED-DECL)
  (:OBJ-CINTERFACE-DECL :IS-SAME-OR-DERIVED-FROM :NAMED-DECL)
  (:OBJ-CMESSAGE-EXPR :HAS-ANY-ARGUMENT :EXPR)
  (:OBJ-CMESSAGE-EXPR :HAS-ARGUMENT :UNSIGNED-N :EXPR)
  (:OBJ-CMESSAGE-EXPR :HAS-RECEIVER :EXPR)
  (:OBJ-CMESSAGE-EXPR :HAS-RECEIVER-TYPE :QUAL-TYPE)
  (:OBJ-CMETHOD-DECL :HAS-ANY-PARAMETER :PARM-VAR-DECL)
  (:OBJ-CMETHOD-DECL :HAS-PARAMETER :UNSIGNED-N :PARM-VAR-DECL)
  (:OBJ-CPROPERTY-DECL :HAS-TYPE-LOC :TYPE-LOC)
  (:OPAQUE-VALUE-EXPR :HAS-SOURCE-EXPRESSION :EXPR)
  (:OVERLOAD-EXPR :HAS-ANY-DECLARATION :DECL) (:PAREN-TYPE :INNER-TYPE :TYPE)
  (:POINTER-TYPE :POINTEE :TYPE) (:QUAL-TYPE :HAS-CANONICAL-TYPE :QUAL-TYPE)
  (:QUAL-TYPE :HAS-DECLARATION :DECL) (:QUAL-TYPE :IGNORING-PARENS :QUAL-TYPE)
  (:QUAL-TYPE :POINTS-TO :DECL) (:QUAL-TYPE :POINTS-TO :QUAL-TYPE)
  (:QUAL-TYPE :REFERENCES :DECL) (:QUAL-TYPE :REFERENCES :QUAL-TYPE)
  (:RECORD-TYPE :HAS-DECLARATION :DECL) (:REFERENCE-TYPE :POINTEE :TYPE)
  (:RETURN-STMT :HAS-RETURN-VALUE :EXPR)
  (:STMT-EXPR :HAS-ANY-SUBSTATEMENT :STMT)
  (:STMT :ALIGN-OF-EXPR :UNARY-EXPR-OR-TYPE-TRAIT-EXPR)
  (:STMT :FOR-CALLABLE :DECL) (:STMT :FOR-FUNCTION :FUNCTION-DECL)
  (:STMT :SIZE-OF-EXPR :UNARY-EXPR-OR-TYPE-TRAIT-EXPR)
  (:SUBST-TEMPLATE-TYPE-PARM-TYPE :HAS-REPLACEMENT-TYPE :TYPE)
  (:SWITCH-STMT :FOR-EACH-SWITCH-CASE :SWITCH-CASE)
  (:SWITCH-STMT :HAS-CONDITION :EXPR) (:SWITCH-STMT :HAS-INIT-STATEMENT :STMT)
  (:TAG-TYPE :HAS-DECLARATION :DECL)
  (:TEMPLATE-ARGUMENT-LOC :HAS-TYPE-LOC :TYPE-LOC)
  (:TEMPLATE-ARGUMENT :IS-EXPR :EXPR)
  (:TEMPLATE-ARGUMENT :REFERS-TO-DECLARATION :DECL)
  (:TEMPLATE-ARGUMENT :REFERS-TO-INTEGRAL-TYPE :QUAL-TYPE)
  (:TEMPLATE-ARGUMENT :REFERS-TO-TEMPLATE :TEMPLATE-NAME)
  (:TEMPLATE-ARGUMENT :REFERS-TO-TYPE :QUAL-TYPE)
  (:TEMPLATE-SPECIALIZATION-TYPE :HAS-ANY-TEMPLATE-ARGUMENT :TEMPLATE-ARGUMENT)
  (:TEMPLATE-SPECIALIZATION-TYPE :HAS-DECLARATION :DECL)
  (:TEMPLATE-SPECIALIZATION-TYPE :HAS-TEMPLATE-ARGUMENT :UNSIGNED-N
   :TEMPLATE-ARGUMENT)
  (:TEMPLATE-TYPE-PARM-TYPE :HAS-DECLARATION :DECL) (:TYPE-LOC :LOC :QUAL-TYPE)
  (:TYPEDEF-NAME-DECL :HAS-TYPE-LOC :TYPE-LOC)
  (:TYPEDEF-NAME-DECL :HAS-TYPE :QUAL-TYPE)
  (:TYPEDEF-TYPE :HAS-DECLARATION :DECL)
  (:TYPE :HAS-UNQUALIFIED-DESUGARED-TYPE :TYPE)
  (:UNARY-EXPR-OR-TYPE-TRAIT-EXPR :HAS-ARGUMENT-OF-TYPE :QUAL-TYPE)
  (:UNARY-OPERATOR :HAS-UNARY-OPERAND :EXPR)
  (:UNRESOLVED-MEMBER-EXPR :HAS-OBJECT-EXPRESSION :EXPR)
  (:UNRESOLVED-USING-TYPE :HAS-DECLARATION :DECL)
  (:USING-DECL :HAS-ANY-USING-SHADOW-DECL :USING-SHADOW-DECL)
  (:USING-SHADOW-DECL :HAS-TARGET-DECL :NAMED-DECL)
  (:VALUE-DECL :HAS-TYPE :DECL) (:VALUE-DECL :HAS-TYPE :QUAL-TYPE)
  (:VAR-DECL :HAS-INITIALIZER :EXPR)
  (:VARIABLE-ARRAY-TYPE :HAS-SIZE-EXPR :EXPR) (:WHILE-STMT :HAS-BODY :STMT)
  (:WHILE-STMT :HAS-CONDITION :EXPR)))
