• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • ACL2
    • Macro-libraries
    • Interfacing-tools
      • Io
      • Defttag
      • Sys-call
      • Save-exec
      • Quicklisp
      • Std/io
      • Oslib
      • Bridge
      • Clex
      • Tshell
      • Unsound-eval
      • Hacker
      • ACL2s-interface
      • Startup-banner
      • Command-line
        • Save-exec
        • Argv
        • Getopt
          • Demo-p
            • Parse-demo
              • Parse-demo-long
                • Parse-demo-aux
                • Parse-demo-bundle
                • Parse-demo-short->long-list
                • Parse-demo-short->long
              • Demo
              • Make-demo
              • Change-demo
              • Honsed-demo
              • Make-honsed-demo
              • *demo-usage*
              • Demo->version
              • Demo->verbose
              • Demo->username
              • Demo->port
              • Demo->help
              • Demo->extra-stuff2
              • Demo->extra-stuff
              • Demo->dirs
            • Defoptions
            • Demo2
            • Parsers
            • Sanity-check-formals
            • Formal->parser
            • Formal->argname
            • Formal->longname
            • Formal->alias
            • Formal->usage
            • Formal->merge
            • Formal->hiddenp
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Parse-demo

    Parse-demo-long

    Signature
    (parse-demo-long getopt::longname getopt::explicit-val 
                     args getopt::acc getopt::seen) 
     
      → 
    (mv getopt::errmsg getopt::acc rest)
    Arguments
    getopt::longname — Longname we've just found, e.g., "foo" if we've just seen --foo=bar.
        Guard (stringp getopt::longname).
    getopt::explicit-val — Any explicit value passed to this option, e.g., "bar" if we've just seen --foo=bar, or NIL if we've just seen --foo.
        Guard (or (not getopt::explicit-val) (stringp getopt::explicit-val)).
    args — Remaining arguments past longname.
        Guard (string-listp args).
    getopt::acc — Structure we're updating.
        Guard (demo-p getopt::acc).
    getopt::seen — List of longnames that we've seen so far.
        Guard (string-listp getopt::seen).
    Returns
    getopt::errmsg — NIL on success or an error message.
    getopt::acc — Updated structure.
        Type (demo-p getopt::acc), given (force (demo-p getopt::acc)).
    rest — Rest after this one.
        Type (string-listp rest), given (force (string-listp args)).

    Definitions and Theorems

    Function: parse-demo-long

    (defun parse-demo-long
           (getopt::longname getopt::explicit-val
                             args getopt::acc getopt::seen)
     (declare (xargs :guard (and (stringp getopt::longname)
                                 (or (not getopt::explicit-val)
                                     (stringp getopt::explicit-val))
                                 (string-listp args)
                                 (demo-p getopt::acc)
                                 (string-listp getopt::seen))))
     (let ((acl2::__function__ 'parse-demo-long))
      (declare (ignorable acl2::__function__))
      (cond
           ((equal getopt::longname "help")
            (b* (((when (member-equal getopt::longname getopt::seen))
                  (mv (msg "Option --~s0 given multiple times"
                           getopt::longname)
                      getopt::acc args))
                 ((mv getopt::err value rest)
                  (getopt::parse-plain (str::cat "--" getopt::longname)
                                       getopt::explicit-val args))
                 ((when getopt::err)
                  (mv getopt::err getopt::acc args))
                 (getopt::acc (change-demo getopt::acc :help value)))
              (mv nil getopt::acc rest)))
           ((equal getopt::longname "verbose")
            (b* (((when (member-equal getopt::longname getopt::seen))
                  (mv (msg "Option --~s0 given multiple times"
                           getopt::longname)
                      getopt::acc args))
                 ((mv getopt::err value rest)
                  (getopt::parse-plain (str::cat "--" getopt::longname)
                                       getopt::explicit-val args))
                 ((when getopt::err)
                  (mv getopt::err getopt::acc args))
                 (getopt::acc (change-demo getopt::acc
                                           :verbose value)))
              (mv nil getopt::acc rest)))
           ((equal getopt::longname "version")
            (b* (((when (member-equal getopt::longname getopt::seen))
                  (mv (msg "Option --~s0 given multiple times"
                           getopt::longname)
                      getopt::acc args))
                 ((mv getopt::err value rest)
                  (getopt::parse-plain (str::cat "--" getopt::longname)
                                       getopt::explicit-val args))
                 ((when getopt::err)
                  (mv getopt::err getopt::acc args))
                 (getopt::acc (change-demo getopt::acc
                                           :version value)))
              (mv nil getopt::acc rest)))
           ((equal getopt::longname "username")
            (b* (((when (member-equal getopt::longname getopt::seen))
                  (mv (msg "Option --~s0 given multiple times"
                           getopt::longname)
                      getopt::acc args))
                 ((mv getopt::err value rest)
                  (getopt::parse-string (str::cat "--" getopt::longname)
                                        getopt::explicit-val args))
                 ((when getopt::err)
                  (mv getopt::err getopt::acc args))
                 (getopt::acc (change-demo getopt::acc
                                           :username value)))
              (mv nil getopt::acc rest)))
           ((equal getopt::longname "port")
            (b* (((when (member-equal getopt::longname getopt::seen))
                  (mv (msg "Option --~s0 given multiple times"
                           getopt::longname)
                      getopt::acc args))
                 ((mv getopt::err value rest)
                  (getopt::parse-nat (str::cat "--" getopt::longname)
                                     getopt::explicit-val args))
                 ((when getopt::err)
                  (mv getopt::err getopt::acc args))
                 (getopt::acc (change-demo getopt::acc :port value)))
              (mv nil getopt::acc rest)))
           ((equal getopt::longname "dir")
            (b* (((mv getopt::err value rest)
                  (getopt::parse-string (str::cat "--" getopt::longname)
                                        getopt::explicit-val args))
                 ((when getopt::err)
                  (mv getopt::err getopt::acc args))
                 (getopt::old-value (demo->dirs getopt::acc))
                 (value (rcons value getopt::old-value))
                 (getopt::acc (change-demo getopt::acc :dirs value)))
              (mv nil getopt::acc rest)))
           (t (mv (msg "Unrecognized option --~s0"
                       getopt::longname)
                  getopt::acc args)))))

    Theorem: demo-p-of-parse-demo-long.acc

    (defthm demo-p-of-parse-demo-long.acc
      (implies
           (force (demo-p getopt::acc))
           (b* (((mv getopt::?errmsg
                     getopt::?acc common-lisp::?rest)
                 (parse-demo-long getopt::longname getopt::explicit-val
                                  args getopt::acc getopt::seen)))
             (demo-p getopt::acc)))
      :rule-classes :rewrite)

    Theorem: string-listp-of-parse-demo-long.rest

    (defthm string-listp-of-parse-demo-long.rest
      (implies
           (force (string-listp args))
           (b* (((mv getopt::?errmsg
                     getopt::?acc common-lisp::?rest)
                 (parse-demo-long getopt::longname getopt::explicit-val
                                  args getopt::acc getopt::seen)))
             (string-listp rest)))
      :rule-classes :rewrite)

    Theorem: parse-demo-long-makes-progress

    (defthm parse-demo-long-makes-progress
     (<=
      (len
          (mv-nth 2
                  (parse-demo-long getopt::longname getopt::explicit-val
                                   args getopt::acc getopt::seen)))
      (len args))
     :rule-classes ((:rewrite) (:linear)))