|SableCC is an object-oriented framework
that generates compilers (and interpreters) in the Java programming
language. This framework is based on two fundamental design decisions.
Firstly, the framework uses object-oriented techniques to automatically
build a strictly typed abstract syntax tree that matches the grammar of
the compiled language and simplifies debugging. Secondly, the framework
generates tree-walker classes using an extended version of the visitor
design pattern which enables the implementation of actions on the nodes
of the abstract syntax tree using inheritance. These two design
decisions lead to a tool that supports a shorter development cycle for
SableCC project home
|Soot is a Java optimization framework. It
provides three intermediate
representations for analyzing and transforming Java bytecode:
Soot can be used as a stand alone tool to optimize or inspect class
files, as we
as a framework to develop optimizations or transformations on Java
- Baf: a streamlined representation of bytecode
which is simple to
- Jimple: a typed 3-address intermediate
representation suitable for
- Grimp: an aggregated version of Jimple
suitable for decompilation and
Soot project home
|Ashes is a companion project to the Soot
optimization framework. It provides
three distinct packages.
- Ashes Suite Collection: a collection of Java
benchmarks which can be used as
test programs or as evaluation benchmarks. The run scripts for the
are bash scripts.
- ashes.* package: a collection of Java
programs written with the Soot framework
to provide some interesting standalone compiler functionality. Works
under any Java compliant system.
- Ashes scripts: a collection of bash scripts
which simplify the
interface to the Ashes Suite Collection and the Ashes Java package
Ashes project home
|SableVM is a portable bytecode
interpreter written in C, and implementing the Java virtual machine
specification, second edition. Its goals are to be reasonably small,
fast, and efficient, as well as providing a well-designed and robust
platform for conducting research.
SableVM project home
|EVolve is an extensible framework for
visualizing the characteristics and behaviour of object-oriented
programs. The architecture of EVolve is designed to facilitate the
addition of new data sources as well as new visualization techniques.
EVolve allows data providers to examine a new data source immediately
using a wide range of visualizations, and allows visualization
providers to test a new visualization technique on a variety of
EVolve project home
|STEP is a system designed to provide
profiler developers with a standard method for encoding general program
trace data in a flexible and compact format. The system consists of a
trace data definition language along with a compiler and an
architecture that simplifies the client interface by encapsulating the
details of encoding and interpretation.
STEP project home
| The Java Intermediate Language (JIL) is
a subset of XML and SGML described in this document. Its goal is to
provide an intermediate representation of Java source code suitable for
machine use. JIL benefits from the features of XML, such as
extensibility and portability, while providing a common ground for
JIL porject home
|Points-to Analysis using BDDs
|In this project we investigated a new approach to
solving a subset-based points-to analysis (Andersen's analysis) for
Java using Binary Decision Diagrams (BDDs). In the model checking
community, BDDs have been shown very effective for representing large
sets and solving very large verification problems. Our work shows that
BDDs can also be very effective for developing a points-to analysis
that is simple to implement and that scales well, in both space and
time, to large programs.
PTA-BDD project home
|Dynamic Software Metrics
|In this project we investigate how to quantify the
of programs with a concise and precisely defined set of metrics.
programs are often described as numeric, memory-intensive,
concurrent and so on. Dynamic metrics aim at
providing a rigorous
and unambiguous way of measuring such characteristics by providing
an informative summary of different aspects of the dynamic behaviour
of programs and making these intuitive notions of program behaviour
more concrete and subject to experimental validation.
Empirical results for a growing set of benchmarks are
Dynamic Metrics project home
|abc, an AspectJ compiler
abc is a complete
that aims to make it easy to implement both extensions and
of the core language. It is built on the Polyglot
for extensible Java compilation and the Soot
framework for Java
abc is a joint project between
Tools Group at Oxford University and the Sable research group, mainly
based at McGill University in Montreal. It is free software, licensed
under the GNU LGPL.
We encourage people both to use it as an alternative AspectJ
and to extend and improve it.
abc is for Java. Nevertheless, a list of AOP approaches
in .NET can be found here.
abc, an AspectJ compiler,
|Jedd: Java Extension for Decision Diagrams
Jedd is a Java language extension designed for
implementing program analyses using binary decision diagrams (BDDs).
BDDs are abstracted in Jedd as a new primitive data type,
A detailed paper about Jedd was presented at PLDI 2004, and is
available from the Sable publications page.
Additional information about Jedd can also be found in my PhD thesis,
in Chapter 3 and Appendix B.
Jedd is based on the Polyglot extensible compiler
framework. Currently, Jedd supports four BDD libraries as backends:
BuDDy, CUDD, SableJBDD, and JavaBDD. When building Jedd from source,
these libraries should be downloaded separately.
The binary distribution of Jedd has these libraries linked in.
Jedd is freely available for download under the GNU
Lesser General Public License.
Jedd project home
|Paddle: BDD-based context-sensitive interprocedural
analysis of Java
Paddle is a context-sensitive points-to analysis and
call graph construction framework for Soot.
Paddle supports several variations of context sensitivity, including
the use of call site strings as the context abstraction,
object sensitivity, and the Zhu/Calman/Whaley/Lam algorithm. Paddle
uses binary decision diagrams (BDDs) to efficiently
represent the context-sensitive analysis facts. Paddle is written in
the Jedd language, which is compiled to Java.
Paddle is a component of Soot, rather than a standalone
program. Therefore, Soot is required to use Paddle, and each
version of Paddle is intended for a specific version of Soot. Paddle is
distributed separately from Soot to avoid requiring
Jedd to compile Soot.
Paddle project home
|AIA: Aspect Impact Analysis
|AspectJ is a convenient Aspect-Oriented programming
(AOP) extension of Java, which addresses cross-cutting concerns but
breaks encapsulation. In this project, we analyze and visualize impacts
caused by aspects. Impacts are classified by a new classification
system, analyzed using static analyses, and visualized with an Eclipse
plug-in. Thus, hidden effect of aspects can be understood and analyzed
by programmers easily.
AIA project home