Parse a list of zero or more label declarations.
(parse-*-label-declaration parstate) → (mv erp labelss span new-parstate)
That is, we parse a
If the next token is not the
Function:
(defun parse-*-label-declaration (parstate) (declare (xargs :stobjs (parstate))) (declare (xargs :guard (parstatep parstate))) (let ((__function__ 'parse-*-label-declaration)) (declare (ignorable __function__)) (b* (((reterr) nil (irr-span) parstate) ((erp token span parstate) (read-token parstate)) ((unless (token-keywordp token "__label__")) (b* ((parstate (if token (unread-token parstate) parstate))) (retok nil (irr-span) parstate))) ((erp labels labels-span parstate) (parse-label-declaration parstate)) ((erp labelss labelss-span parstate) (parse-*-label-declaration parstate))) (retok (cons labels labelss) (if labelss (span-join span labelss-span) (span-join span labels-span)) parstate))))
Theorem:
(defthm ident-list-listp-of-parse-*-label-declaration.labelss (b* (((mv acl2::?erp ?labelss ?span ?new-parstate) (parse-*-label-declaration parstate))) (ident-list-listp labelss)) :rule-classes :rewrite)
Theorem:
(defthm spanp-of-parse-*-label-declaration.span (b* (((mv acl2::?erp ?labelss ?span ?new-parstate) (parse-*-label-declaration parstate))) (spanp span)) :rule-classes :rewrite)
Theorem:
(defthm parstatep-of-parse-*-label-declaration.new-parstate (implies (parstatep parstate) (b* (((mv acl2::?erp ?labelss ?span ?new-parstate) (parse-*-label-declaration parstate))) (parstatep new-parstate))) :rule-classes :rewrite)
Theorem:
(defthm parsize-of-parse-*-label-declaration-uncond (b* (((mv acl2::?erp ?labelss ?span ?new-parstate) (parse-*-label-declaration parstate))) (<= (parsize new-parstate) (parsize parstate))) :rule-classes :linear)