Welcome to CIVL, the Concurrency Intermediate Verification
Language tool. CIVL is a Java project for verifying concurrent
programs written in CIVL-C, which is a C dialect with extensions to
concurrent language constructs. The CIVL project uses ABC, SARL and
GMC. The CIVL tool can be used to perform a number of tasks, including
the following:
- preprocess or pass a CIVL-C program;
- verify a CIVL-C program;
- run a CIVL-C program;
- replay traces for a program.
In addition, it provides a framework for developing your own libraries
or transformations on ASTs of various language extensions and
libraries.
There is a simple command-line interface for CIVL (see {@link
edu.udel.cis.vsl.civl.CIVL CIVL}), but most users will want to use CIVL
through the user interface (see {@link
edu.udel.cis.vsl.civl.run.IF.UserInterface UserInterface}). To use the API, it is helpful to have some
understanding of the modular structure of CIVL. The CIVL source code is
decomposed into modules, each with a well-defined interface and set of
responsibilities. Some of these modules are decomposed further into
sub-modules. The top-level modules are:
- util
- responsibilities: simple general-purpose utility classes
that do not use other parts of CIVL
- uses: nothing
- interface: {@link edu.udel.cis.vsl.civl.util.IF}
- entry point: none
- transform
- responsibilities: transformations of an AST
- uses: abc
- interface: {@link edu.udel.cis.vsl.civl.transform.IF}
- entry point: CIVLTransform
- run
- responsibilities: parsing command line inputs and initial
configurations of the tool
- uses: transform, abc
- interface: {@link edu.udel.cis.vsl.civl.run.IF}
- entry point: UserInterface
TBC.