Read a token during preprocessing.
(pread-token headerp ppstate) → (mv erp nontokens token? token-span new-ppstate)
We lex zero or more non-tokens, until we find a token.
We return the list of non-tokens, and the token with its span.
If we reach the end of file, we return
The
Function:
(defun pread-token (headerp ppstate) (declare (xargs :stobjs (ppstate))) (declare (xargs :guard (and (booleanp headerp) (ppstatep ppstate)))) (b* (((reterr) nil nil (irr-span) ppstate) ((erp lexeme span ppstate) (plex-lexeme headerp ppstate)) ((when (not lexeme)) (retok nil nil span ppstate)) ((when (plexeme-tokenp lexeme)) (retok nil lexeme span ppstate)) ((erp nontokens token token-span ppstate) (pread-token headerp ppstate))) (retok (cons lexeme nontokens) token token-span ppstate)))
Theorem:
(defthm plexeme-listp-of-pread-token.nontokens (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (plexeme-listp nontokens)) :rule-classes :rewrite)
Theorem:
(defthm plexeme-optionp-of-pread-token.token? (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (plexeme-optionp token?)) :rule-classes :rewrite)
Theorem:
(defthm spanp-of-pread-token.token-span (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (spanp token-span)) :rule-classes :rewrite)
Theorem:
(defthm ppstatep-of-pread-token.new-ppstate (implies (ppstatep ppstate) (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (ppstatep new-ppstate))) :rule-classes :rewrite)
Theorem:
(defthm plexeme-list-not-tokenp-of-pread-token (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (plexeme-list-not-tokenp nontokens)))
Theorem:
(defthm plexeme-tokenp-of-pread-token (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (implies token? (plexeme-tokenp token?))))
Theorem:
(defthm ppstate->size-of-pread-token-uncond (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (<= (ppstate->size new-ppstate) (ppstate->size ppstate))) :rule-classes :linear)
Theorem:
(defthm ppstate->size-of-pread-token-cond (b* (((mv acl2::?erp ?nontokens ?token? ?token-span ?new-ppstate) (pread-token headerp ppstate))) (implies (and (not erp) token?) (<= (ppstate->size new-ppstate) (1- (ppstate->size ppstate))))) :rule-classes :linear)