Lex a decimal exponent.
This is called when we expect an exponent.
We try to read a
Function:
(defun lex-exponent-part (parstate) (declare (xargs :stobjs (parstate))) (declare (xargs :guard (parstatep parstate))) (let ((__function__ 'lex-exponent-part)) (declare (ignorable __function__)) (b* (((reterr) (irr-dexpo) (irr-position) parstate) ((erp char pos parstate) (read-char parstate))) (cond ((not char) (reterr-msg :where (position-to-msg pos) :expected "a character in {e, E}" :found (char-to-msg char))) ((or (utf8-= char (char-code #\e)) (utf8-= char (char-code #\E))) (b* ((prefix (if (utf8-= char (char-code #\e)) (dexprefix-locase-e) (dexprefix-upcase-e))) ((erp sign? sign-last-pos parstate) (lex-?-sign parstate)) ((erp digits digits-last-pos digits-next-pos parstate) (lex-*-digit sign-last-pos parstate)) ((unless digits) (reterr-msg :where (position-to-msg digits-next-pos) :expected "one or more digits" :found "none"))) (retok (make-dexpo :prefix prefix :sign? sign? :digits digits) digits-last-pos parstate))) (t (reterr-msg :where (position-to-msg pos) :expected "a character in {e, E}" :found (char-to-msg char)))))))
Theorem:
(defthm dexpop-of-lex-exponent-part.expo (b* (((mv acl2::?erp ?expo ?last-pos ?new-parstate) (lex-exponent-part parstate))) (dexpop expo)) :rule-classes :rewrite)
Theorem:
(defthm positionp-of-lex-exponent-part.last-pos (b* (((mv acl2::?erp ?expo ?last-pos ?new-parstate) (lex-exponent-part parstate))) (positionp last-pos)) :rule-classes :rewrite)
Theorem:
(defthm parstatep-of-lex-exponent-part.new-parstate (implies (parstatep parstate) (b* (((mv acl2::?erp ?expo ?last-pos ?new-parstate) (lex-exponent-part parstate))) (parstatep new-parstate))) :rule-classes :rewrite)
Theorem:
(defthm parsize-of-lex-exponent-part-uncond (b* (((mv acl2::?erp ?expo ?last-pos ?new-parstate) (lex-exponent-part parstate))) (<= (parsize new-parstate) (parsize parstate))) :rule-classes :linear)
Theorem:
(defthm parsize-of-lex-exponent-part-cond (b* (((mv acl2::?erp ?expo ?last-pos ?new-parstate) (lex-exponent-part parstate))) (implies (and (not erp) expo?) (<= (parsize new-parstate) (1- (parsize parstate))))) :rule-classes :linear)