This directory contains the implementation of various program
analyses which can be used with CASS (the Curry Analysis Server System),
available in the package cass
.
To use an analysis in CASS, it needs to be registered (see the
constant registeredAnalysis
in module
CASS.Registry
of package cass
). The possible
types of analyses to be registered are defined in module
Analysis.Types
. The analyses types are parametric w.r.t.
the domain of abstract values. In order to compare values (e.g., to
check whether a fixpoint is reached) or to persistently store analyses
results (to support an incremental modular analysis), the type of
analysis values must be instances of the classes Eq
,
Read
, Show
, and ReadWrite
. The
latter class is required to support a compact and faster processing of
data.
Whereas instances of Eq
, Read
, and
Show
can be automatically derived (via a
deriving
annotation in the type definition), instances of
ReadWrite
can be generated by the tool
curry-rw-data
. This tool is available as a Curry package
and can be installed by
> cypm install rw-data-generator
Then, ReadWrite
instances of all data types defined in
module Mod
can be generated by the command
> curry-rw-data Mod
This generates a new module ModRW
containing the
instance definitions. To use these in CASS, it is reasonable to put
these instances into the module implementing the analysis. See module
Analysis.Deterministic
for an example for this
strucutre.
The ideas behind the construction of various program analyses can be found in this paper:
M. Hanus, F. Skrlac: A Modular and Generic Analysis Server System for Functional Logic Programs, ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation (PEPM’14), ACM Press, pp. 181-188, 2014