v0.3.5.1
Clafer is a general-purpose lightweight structural modeling language developed by GSD Lab, University of Waterloo, and MODELS group at IT University of Copenhagen. Clafer can be used for modeling of static hierarchical structures but has no support for modeling the change of the structures over time (behavior). The main goal of Clafer is to make modeling more accessible to a wider range of users and domains.
There are many possible applications of Clafer; however, three are prominent:
-
Product-Line Modeling - aims at representing and managing commonality and variability of assets in product lines and creating and verifying product configurations. Clafer naturally supports multi-staged configuration.
-
Multi-Objective Product Optimization - aims at finding a set of products in a given product line that are optimal with respect to a set of objectives. Clafer multi-objective optimizer generates a Pareto front of optimal product configurations.
-
Domain Modeling - aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects. This is also known as Concept Modeling or Ontology Modeling.
Clafer compiler provides a reference language implementation. It translates models in Clafer to other formats (e.g. Alloy, XML, Python, JS, HTML, DOT) to allow for reasoning and processing with existing tools (Alloy Analyzer, Choco3, and Z3 SMT solver).
Currently, the compiler is used by Clafer Instance Generator (ClaferIG), Clafer Integrated Development Environment (ClaferIDE), Clafer Configurator (ClaferConfigurator), Clafer Multi-Objective Optimizer (ClaferMOO) and Visualizer, and Clafer Wiki (ClaferWiki).
- Kacper Bak, Original developer.
- Jimmy Liang, Main developer.
- Michał Antkiewicz, Requirements, development, architecture, testing, technology transfer.
- Ed Zulkoski, Python IR Generator.
- Luke Michael Brown, co-op student May-Aug 2013. Many improvements.
- Rafael Olaechea, Multi-Objective Optimization extensions.
Clafer can be installed from a binary distribution (preferred), from Hackage, and from the source code.
Regardless of the installation method, the following are
Required:
Optional:
- Java Platform (JDK) v6+, 32bit
- needed only for running XML output validation
- Alloy4.1 and/or Alloy4.2
- needed only for Alloy output validation
- GraphViz
- the program
dot
is needed only in thehtml
mode for SVG graph generation
- the program
On Linux
- libglpk-dev v4.52
- execute
sudo apt-get install libglpk-dev
on Ubuntu
- execute
sudo apt-get install libgmp-dev
on Ubuntu
On Windows
- The binary distribution already includes the GNU Linear Programming Kit DLL
glpk_4_52.dll
. - Install WinGLPK v4.52
- inside the
w32
folder, copyglpk_4_52.dll
toglpk.dll
so that it can be found when building Haskell packageglpk-hs
- from
w32
folder, copyglpk_4_52.dll
to<user>\AppData\Roaming\cabal\bin
On Mac only
- install GPLK 4.52 from MacPorts
- execute
sudo port install glpk +universal
Binary distributions of the release 0.3.5.1 of Clafer Tools for Windows, Mac, and Linux, can be downloaded from Clafer Tools - Binary Distributions.
- download the binaries and unpack
<target directory>
of your choice - add the
<target directory>
to your system path so that the executables can be found
Dependencies
- The Haskell Platform v2013.2.0.0
Clafer is now available on Hackage and it can be installed using
cabal update
cabal install clafer
cd <cabal's lib or share folder>
(C:\Users\<user>\AppData\Roaming\cabal\i386-windows-ghc-7.6.3\clafer-0.3.5.1
on Windows or.cabal/share/x86_64-linux-ghc-7.6.3/clafer-0.3.5.1/
on Linux)- to automatically download Alloy jars
- execute
make
intools
On Windows
- copy GLPK's dll
glpk-0.4.52.dll
to theC:\Users\<user>\AppData\Roaming\cabal\bin
folder or any other folder on the systemPATH
Dependencies
- The Haskell Platform v2013.2.0.0
- Alloy4.1 and/or Alloy4.2
- downloaded automatically during build
- Git
On Windows
- MinGW+MSYS
- since the Haskell Platform already contains MinGW, you may choose to install MinGW+MSYS to the same location, e.g.,
c:\...\HaskellPlatform\2013.2.0.0
- add the
bin
folders of MinGW (MinGW\bin
) and MSYS (MinGW\MSYS\1.0\bin
) to your system path unzip
will be automatically installed
- since the Haskell Platform already contains MinGW, you may choose to install MinGW+MSYS to the same location, e.g.,
All related projects are following the simultaneous release model.
The branch master
contains releases, whereas the branch develop
contains code under development.
When building the tools, the branches should match.
Releases from branches 'masterare guaranteed to work well together. Development versions from branches
develop` should work well together but this might not always be the case.
- install the dependencies
- open the command line terminal. On Windows, open MinGW.
- in some
<source directory>
of your choice, execute
git clone git://github.com/gsdlab/clafer.git
- in
<source directory>/clafer
, execute
cabal update
- On Linux and Mac execute
make
- On Windows (in MinGW), execute
make glpk="/c/<your WinGLPK install dir>"
- On Linux and Mac execute
make install to=<target directory>
- On Windows (in MinGW), execute
make glpk="/c/<your WinGLPK instal dir>" to=/c/<target directory>
- add the
<target directory>
to your system PATH
On Windows, use
/
with themake
command instead of\
.
(As printed by clafer --help
)
Clafer v0.3.5.1
clafer [OPTIONS] [FILE]
Common flags:
-m --mode=CLAFERMODE Generated output type. Available
CLAFERMODEs are: 'alloy' (default,
Alloy 4.1); 'alloy42' (Alloy 4.2);
'xml' (intermediate representation of
Clafer model); 'clafer' (analyzed and
desugared clafer model); 'html'
(original model in HTML); 'graph'
(graphical representation written in
DOT language); 'cvlgraph' (cvl
notation representation written in
DOT language); 'python' (generates IR
in python); 'choco' (Choco constraint
programming solver). Multiple modes
can be specified at the same time,
e.g., '-m alloy -m html'.
-o --console-output Output code on console.
-i --flatten-inheritance Flatten inheritance ('alloy' and
'alloy42' modes only).
--timeout-analysis=INT Timeout for analysis.
-l --no-layout Don't resolve off-side rule layout.
--nl --new-layout Use new fast layout resolver
(experimental).
-c --check-duplicates Check duplicated clafer names.
-f --skip-resolver Skip name resolution.
-k --keep-unused Keep uninstantated abstract clafers
('alloy' and 'alloy42' modes only).
-s --no-stats Don't print statistics.
--schema Show Clafer IR (intermediate
representation) XML schema.
-v --validate Validate outputs of all modes. Uses
'tools/XsdCheck.class' for XML,
'tools/alloy4.jar' and
'tools/alloy4.2.jar' for Alloy
models, and Clafer translator for
desugared Clafer models. Use
'--tooldir' to override the default
location of these tools.
--nr --noalloyruncommand For usage with partial instances:
Don't generate the alloy 'run show
for ... ' command, and rename @.ref
with unique names ('alloy' and
'alloy42' modes only).
--tooldir=DIR Specify the tools directory
('validate' only). Default: 'tools/'.
-a --alloy-mapping Generate mapping to Alloy source
code ('alloy' and 'alloy42' modes
only).
--self-contained Generate a self-contained html
document ('html' mode only).
--add-graph Add a graph to the generated html
model ('html' mode only). Requires
the "dot" executable to be on the
system path.
--sr --show-references Whether the links for references
should be rendered. ('html' and
'graph' modes only).
--add-comments Include comments from the source
file in the html output ('html' mode
only).
-e --ecore2clafer Translate an ECore model into
Clafer.
--ss=SCOPESTRATEGY --scope-strategy Use scope computation strategy:
none, simple (default), or full.
--check-afm --afm Throws an error if the cardinality
of any of the clafers is above 1.
--sg --skip-goals Skip generation of Alloy code for
goals. Useful for all tools working
with standard Alloy.
--meta-data Generate a 'fully qualified
name'-'least-partially-qualified
name'-'unique ID' map ('.cfr-map').
In Alloy, Alloy42, and Choco modes,
generate the scopes map
('.cfr-scope').
-? --help Display help message
-V --version Print version information
The dependencies among the command line arguments are described on the model wiki.
Multiple modes can be used at the same time. For example,
clafer model.cfr -m alloy -m xml -m html -m graph --self-contained --show-references --no-stats
The mode -m alloy
is only a default mode if no other modes are given. When other modes are given, the mode -m alloy
must be added explicitly if needed.
Additionally, [OPTIONS]
can also be specified directly in the model file by inserting the following compiler directive as the first line of the file:
//# [OPTIONS]
for example
//# --keep-unused -m=alloy42
Options given at command line override the options given in the file using //#
which, in turn, override the defaults.
Compiler directives are comments of the form
//# <directive name>
The following directives are markers of locations in the input files for different purposes:
//# FRAGMENT
- marks the beginning of the new module fragment.//# GRAPH
- marks the insertion point for a graph rendering. The graph is only produced in HTML mode with the argument--add-graph
.//# STATS
- marks the insertion point for module statistics. The statistics can be omitted using the argument--no-stats
.//# SUMMARY
- shorthand for//# GRAPH
and//# STATS
//# QUALITY_ATTRIBUTE
- is used by ClaferMooVisualizer and ClaferConfigurator to distinguish quality attributes, which should be filtered out, from other clafers.
- See language's website for news, technical reports and more
- Check out a Clafer tutorial
- Try a live instance of ClaferWiki
- Try a live instance of ClaferIDE
- Try a live instance of ClaferConfigurator
- Try a live instance of ClaferMooVisualizer
- Take a look at (incomplete) Clafer by examples wiki
- Browse example models in the test suite and MOO examples
- Post questions, report bugs, suggest improvements GSD Lab Bug Tracker. Tag your entries with
clafer
(so that we know what they are related to) and withjimmy-liang
ormichal
(so that Jimmy or Michał gets a notification).