This directory contains a number of concrete and symbolic interpreters:

coreInterpreter (interp_core.C, interp_core.h) - Basic concrete
interpreter.  All other interpreters are derived from this one.

extcallInterpreter (interp_extcall.C, interp_extcall.h) - External
calling interpreter.  This interpreter is designed to work with the
libffi library to call an external implementation of any undefined
functions.

mpiInterpreter (interp_mpi.C, interp_mpi.h) - MPI interpreter.
Overrides MPI primitives for analysis (incomplete).

mapleInterpreter (interp_maple.C, interp_maple.h) - Maple interpreter.
Performs symbolic interpretation using the Maple symbolic math engine.

smtInterpreter (interp_smt.C, interp_smt.h) - SMT interpreter.
Performs symbolic interpretation representing all integer values as
values in the QF_BV (quantifier-free finite precision bit vector)
logic.  Invokes an SMT solver to determine the validity of assertions,
and prints a model generated by the solver for any invalid assertions.

To use an interpreter, pass a C or C++ source file as a command-line
parameter to the chosen interpreter binary.  The interpretation
engine will use the first file specified on the command line.
Most interpreters will invoke a globally scoped function named "test"
passing in one int parameter, however the external calling interpreter
will invoke the standard "main" function.

The interpreters also take the following command-line argument:

-interp:trace - Turns on debug tracing.  This can be used for monitoring
                the state of program variables.

The SMT interpreter additionally takes the following arguments:

-interp:smtSolver "PATH" - specifies the path to the SMT solver executable.
                           Required.  To print a model, the correct
                           command-line arguments must be supplied for
                           your solver.  Appropriate command line arguments
                           are shown below for a number of solvers:

      Beaver:    /path/to/beaver -m --model-file=/dev/stdout
      STP:       /path/to/stp -m -p
      Yices:     /path/to/yices -smt -e
      Boolector: /path/to/boolector -m

-interp:keepSolverInput - retain the SMT solver benchmark file.  This
                          will be made available as "test.smt".
