Check if an optional token may start a structure declaration.
(token-struct-declaration-start-p token? gcc) → yes/no
A structure declaration may start with a specifier or qualifier,
or with the
If GCC extensions are supported, which is indicated by the boolean flag passed as input, we also include semicolons, for empty structure declarations.
Function:
(defun token-struct-declaration-start-p (token? gcc) (declare (xargs :guard (and (token-optionp token?) (booleanp gcc)))) (let ((__function__ 'token-struct-declaration-start-p)) (declare (ignorable __function__)) (or (token-specifier/qualifier-start-p token?) (token-keywordp token? "_Static_assert") (token-keywordp token? "__extension__") (and gcc (token-punctuatorp token? ";")))))
Theorem:
(defthm booleanp-of-token-struct-declaration-start-p (b* ((yes/no (token-struct-declaration-start-p token? gcc))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm non-nil-when-token-strut-declaration-start-p (implies (token-struct-declaration-start-p token? gcc) token?) :rule-classes :forward-chaining)