• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • Proof-checker-array
      • Soft
      • C
        • Syntax-for-tools
        • Atc
        • Language
          • Abstract-syntax
          • Integer-ranges
          • Implementation-environments
          • Dynamic-semantics
          • Static-semantics
            • Check-stmt
            • Check-cond
            • Check-binary-pure
            • Var-table-add-var
            • Check-unary
            • Check-obj-declon
            • Fun-table-add-fun
            • Check-fundef
            • Fun-sinfo
            • Check-expr-asg
            • Check-expr-call
            • Check-arrsub
            • Uaconvert-types
            • Apconvert-type-list
            • Check-initer
            • Adjust-type-list
            • Types+vartab
            • Promote-type
            • Check-tag-declon
            • Check-expr-call-or-asg
            • Check-ext-declon
            • Check-param-declon
            • Check-member
            • Check-expr-pure
            • Init-type-matchp
            • Check-obj-adeclor
            • Check-memberp
            • Check-expr-call-or-pure
            • Check-cast
            • Check-struct-declon-list
            • Check-fun-declor
            • Expr-type
            • Check-ext-declon-list
            • Check-transunit
            • Check-fun-declon
            • Var-defstatus
            • Struct-member-lookup
            • Preprocess
              • Wellformed
              • Check-tyspecseq
              • Check-param-declon-list
              • Check-iconst
              • Check-expr-pure-list
              • Var-sinfo-option
              • Fun-sinfo-option
              • Var-scope-all-definedp
              • Funtab+vartab+tagenv
              • Var-sinfo
              • Var-table-lookup
              • Apconvert-type
              • Var-table
              • Check-tyname
              • Types+vartab-result
              • Funtab+vartab+tagenv-result
              • Fun-table-lookup
              • Wellformed-result
              • Var-table-add-block
              • Var-table-scope
              • Var-table-result
              • Fun-table-result
              • Expr-type-result
              • Adjust-type
              • Check-fileset
              • Var-table-all-definedp
              • Check-const
              • Fun-table-all-definedp
              • Check-ident
              • Fun-table
              • Var-table-init
              • Fun-table-init
            • Grammar
            • Integer-formats
            • Types
            • Portable-ascii-identifiers
            • Values
            • Integer-operations
            • Computation-states
            • Object-designators
            • Operations
            • Errors
            • Tag-environments
            • Function-environments
            • Character-sets
            • Flexible-array-member-removal
            • Arithmetic-operations
            • Pointer-operations
            • Bytes
            • Keywords
            • Real-operations
            • Array-operations
            • Scalar-operations
            • Structure-operations
          • Representation
          • Transformation-tools
          • Insertion-sort
          • Pack
        • Farray
        • Rp-rewriter
        • Instant-runoff-voting
        • Imp-language
        • Sidekick
        • Leftist-trees
        • Java
        • Taspi
        • Bitcoin
        • Riscv
        • Des
        • Ethereum
        • X86isa
        • Sha-2
        • Yul
        • Zcash
        • Proof-checker-itp13
        • Regex
        • ACL2-programming-language
        • Json
        • Jfkr
        • Equational
        • Cryptography
        • Poseidon
        • Where-do-i-place-my-book
        • Axe
        • Bigmems
        • Builtins
        • Execloader
        • Aleo
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Static-semantics

    Preprocess

    Preprocess a file set [C17:5.1.1.2/4].

    Signature
    (preprocess fileset) → tunit
    Arguments
    fileset — Guard (filesetp fileset).
    Returns
    tunit — Type (transunit-resultp tunit).

    This is a very simplified model of C preprocessing [C17:6.10]. If there is no header, this is essentially a no-op: the external declarations are unwrapped from the source file and re-wrapped into a translation unit. If there is a header, as explained in fileset, it is implicitly included in the source file (without an explicit representation of the #include directive): we concatenate the external declarations from the header and the external declarations from the source file, and wrap the concatenation into a translation unit. This amounts to replacing the (implicit) #include with the included header, which is assumed to be at the beginning of the source file. The path without extension component of the file set is currently ignored, because the #include is implicit.

    Definitions and Theorems

    Function: preprocess

    (defun preprocess (fileset)
      (declare (xargs :guard (filesetp fileset)))
      (let ((__function__ 'preprocess))
        (declare (ignorable __function__))
        (b* ((h-extdecls (and (fileset->dot-h fileset)
                              (file->declons (fileset->dot-h fileset))))
             (c-extdecls (file->declons (fileset->dot-c fileset))))
          (make-transunit :declons (append h-extdecls c-extdecls)))))

    Theorem: transunit-resultp-of-preprocess

    (defthm transunit-resultp-of-preprocess
      (b* ((tunit (preprocess fileset)))
        (transunit-resultp tunit))
      :rule-classes :rewrite)

    Theorem: preprocess-of-fileset-fix-fileset

    (defthm preprocess-of-fileset-fix-fileset
      (equal (preprocess (fileset-fix fileset))
             (preprocess fileset)))

    Theorem: preprocess-fileset-equiv-congruence-on-fileset

    (defthm preprocess-fileset-equiv-congruence-on-fileset
      (implies (fileset-equiv fileset fileset-equiv)
               (equal (preprocess fileset)
                      (preprocess fileset-equiv)))
      :rule-classes :congruence)