Check if an optional token is a storage class specifier.
(token-storage-class-specifier-p token?) → yes/no
All storage class specifiers consist of single keywords.
Function:
(defun token-storage-class-specifier-p (token?) (declare (xargs :guard (token-optionp token?))) (let ((__function__ 'token-storage-class-specifier-p)) (declare (ignorable __function__)) (or (equal token? (token-keyword "typedef")) (equal token? (token-keyword "extern")) (equal token? (token-keyword "static")) (equal token? (token-keyword "_Thread_local")) (equal token? (token-keyword "auto")) (equal token? (token-keyword "register")))))
Theorem:
(defthm booleanp-of-token-storage-class-specifier-p (b* ((yes/no (token-storage-class-specifier-p token?))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm non-nil-when-token-storage-class-specifier-p (implies (token-storage-class-specifier-p token?) token?) :rule-classes :compound-recognizer)