The Ciao PreprocessorCiaoPP is an extensible and modular abstract interpretation-based preprocessor for Ciao.
CiaoPP performs a number of program debugging, analysis, and source-to-source transformations:
- Inference of properties of the predicates and literals of the program (types, modes and other variable instantiation properties, non-failure, determinacy, bounds on computational cost, bounds on sizes of terms in the program, etc.).
- Certain kinds of static debugging and verification, finding errors before running the program. This includes checking how programs call system library predicates and also checking the assertions present in the program or in other modules used by the program. Such assertions represent essentially partial specifications of the program.
- Several kinds of source to source program transformations such as program specialization, slicing, partial evaluation, program parallelization (taking granularity control into account), inclusion of run-time tests for assertions which cannot be checked completely at compile-time, etc.
This repository contains the generic preprocessor framework together with some basic domains, transformations, and language support. Other features are distributed as separate bundles.
CiaoPP is distributed under the GNU general public license.