Main Page

Project Homes
Dynamic Metrics
abc AspectJ compiler

List of Projects

Projects top

SableCC top
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 constructing compilers.

SableCC project home

Soot top
Soot is a Java optimization framework. It provides three intermediate representations for analyzing and transforming Java bytecode:
  1. Baf: a streamlined representation of bytecode which is simple to manipulate.
  2. Jimple: a typed 3-address intermediate representation suitable for optimization.
  3. Grimp: an aggregated version of Jimple suitable for decompilation and code inspection.
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 bytecode.

Soot project home

Ashes top
Ashes is a companion project to the Soot optimization framework. It provides three distinct packages.
  1. Ashes Suite Collection: a collection of Java benchmarks which can be used as test programs or as evaluation benchmarks. The run scripts for the individual benchmarks are bash scripts.
  2. 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.
  3. 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 top
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 top
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 existing sources.

EVolve project home

STEP top
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

JIL top
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 software tools.

JIL porject home

Points-to Analysis using BDDs top
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 top
In this project we investigate how to quantify the dynamic behaviour of programs with a concise and precisely defined set of metrics. Benchmark 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 provided.

Dynamic Metrics project home

abc, an AspectJ compiler top

abc is a complete implementation of AspectJ that aims to make it easy to implement both extensions and optimisations of the core language. It is built on the Polyglot framework for extensible Java compilation and the Soot framework for Java optimisation.

abc is a joint project between the Programming 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 implementation 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, home page

Jedd: Java Extension for Decision Diagrams top

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, database-style relations. 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 top

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 top
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