The xtc (eXTensible Compiler) project is exploring novel programming languages and tools to improve the expressiveness, safety, and efficiency of complex systems.


xtc’s highlights include:

Additionally, xtc has support for common tool tasks, such as processing command line flags, managing file search paths, setting character encodings, and reporting program errors.

Discontinued components include:

These components are still accessible through version 1.15.0 of the source release (see below).


Key Publications

See Robert Grimm’s publications for a complete list of papers and talks on xtc.

User Guides


xtc is released mostly under the GNU GPL version 2. The main exception is the Rats! runtime, which is released under the GNU LGPL version 2.1. See xtc’s sources and Javadoc documentation for a detailed list of these classes.

xtc’s current distribution is version 2.4.0, which was released 8/17/14. It includes the following files:

Note that the binary distribution's xtc.jar contains all classes contained in the parser binary rats.jar and the parser runtime rats-runtime.jar.

Version 1.8.0 of the source distribution is still available to ensure the repeatability of the experimental results reported in the PLDI ’06 paper “Better Extensibility through Modular Syntax.” Version 1.15.0 is the last version to contain several discontinued tools. We preserve both source code and test suite.

The source distribution comes with extensive documentation, including installation instructions (step-by-step.html in xtc’s root directory), an overview of our setup (development.html), and Javadoc-generated class documentation (execute “make doc”).

This page provides an introduction to Rats!, our parser generator. It is part of xtc’s Javadoc documentation (hence the @link mark-up) and uses examples from Rats!’ own grammar as well as from our Java and C grammars (look in the src/xtc/parser and src/xtc/lang directories in the source distribution).

The binary distribution is invoked from the command line by typing:

java -cp xtc.jar tool-class-name

Valid tool class names include:

When invoked without additional arguments, each tool prints usage instructions including recognized command line arguments.

xtc’s dependencies include the following Java packages:

For the source release, the corresponding jar files should be placed into the bin directory of the distribution. The JUnit and JavaBDD jar files should also be added to the class path.

For your convenience, dependencies.zip contains the jar files for JUnit 4.8.2, JavaNCSS 32.53, JFlex 1.4.3, and JavaBDD 1.0b2.

The source distribution of the Marco macro processor is available as a separate download.

Mailing Lists


xtc is currently being developed by Paul Gazzillo and Robert Grimm.

Major contributors are Marc Fiuczynski, Buğra Gedik, Laune Harris, Martin Hirzel, Anh Le, Byeongcheol Lee, Kathryn McKinley, Joe Pamer, Robert Soulé, Ben Wiedermann, and Marco Yuen.

Further contributors are Ken Britton, Chris Capel, Christopher Conway, Christine Flood, Hunter Freyer, Marek Gilbert, Ben Goldberg, Eric Hielscher, Thomas Huston, Chris Jones, Yonas Jongkind, Dejan Jovanović, Adam Kravetz, Stacey Kuznetsov, Petar Maymounkov, Thomas Moschny, William Moy, Janus Dam Nielsen, Karen Osmond, Robin Lee Powell, Matt Renzelmann, Sukyoung Ryu, Jacob Shufro, Uwe Simm, and Mengtao Sun.

xtc is used by:

This material is based in part upon work supported by the National Science Foundation under grants CNS-0448349, CNS-0615129, and CCF-1017849. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.