Research Projects

AN other T ool for L anguage R ecognition, is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in a variety of target languages. ANTLR provides excellent support for tree construction, tree walking, translation, error recovery, and error reporting.

The ANTLR GUI Development Environment (grad student Jean Bovet working with prof. Terence Parr).

A simple tool for visualizing all incoming and outgoing Ethernet packets on Mac OS X.  Written by grad student Jean Bovet.

gUnit is a unit testing framework for ANTLR grammars. It provides a simple way to write and run automated tests for grammars in a manner similar to what jUnit does for unit testing. The basic idea is to come up with a bunch of input/output pairs for rules in a grammar. The input can be a single line or multiple lines of strings or even an external file. The output can be simply success or failure, an abstract syntax tree (AST), a rule return value, or some text output. The current version of gUnit has 2 main functions, interpreter and jUnit generator. The interpreter interprets your gUnit script and runs unit tests using Java reflection to invoke methods in your parser objects. The generator, on the other hand, translates your gUnit script to jUnit Java code that you can compile and execute by hand. (grad student Leon Su working with prof. Terence Parr).

River is a Python-based framework for rapid prototyping of reliable parallel run-time systems. The current quest for new parallel programming models is hampered, in part, by the time and complexity required to develop dynamic run-time support and network communication. Integrating mechanisms for fault tolerance, such as checkpointing or mirroring, further complicates an implementation. The simplicity of the River core combined with Python's dynamic typing and concise notation makes it possible to go from a design idea to a working implementation in a matter of days or even hours. With the ability to test and throw away several implementations, River allows researchers to explore a large design space. In addition, the River core and new extensions can be used directly to develop parallel applications in Python.

same is a GUI-based tool that detects duplicate code chunks within a set of Java files. In a sense it is the opposite of the UNIX diff tool. In a nutshell, same normalizes Java code and  is able to find duplicate code chunks even when the formatting is radically different, when the variable name has changed, and even when constants have changed. (grad student Do Te Kien working with prof. Terence Parr).

java template engine (with ports for C# and Python) for generating source code, web pages, emails, or any other formatted text output. StringTemplate is particularly good at multi-targeted code generators, multiple site skins, and internationalization/localization. It evolved over years of effort developing . StringTemplate also generates this website and powers the ANTLR v3 code generator. Its distinguishing characteristic is that it strictly enforces model-view separation unlike other engines. Strict separation makes websites and code generators more flexible and maintainable; it also provides an excellent defense against malicious template authors.

Java profiling tool (uses source-to-source translation to instrument java code). (grad students James Chen and Wei Chen working with prof. Terence Parr).

Visual Automata Simulator
A tool for simulating, visualizing and transforming finite state automata and Turing machines.  (grad student Jean Bovet working with prof. David Galles).