This directory contains the string transducer program DReX.


DReX is a domain specific language for string transformations. Think of
examples like, "Replace every occurrence of the variable foo with the
variable bar," or "Transform telephone numbers formatted as (123) 456-7890
to 123-456-7890."

  1. *DReX has strong theoretical foundations.* The class of functions
     expressible using DReX coincides with the class of regular string
     transformations. There are several equivalent characterizations, such as
     two-way finite state transducers, streaming string transducers, and graph
     transformations in monadic second-order logic.
  2. *DReX is declarative.* Transformations are modular, and small
     easy-to-understand transformers can be combined into more complicated
  3. *DReX is fast.* There is a streaming one-pass algorithm to evaluate DReX
  4. *DReX is safe.* It is possible to mechanically answer audit questions
     like, "Does this transformer ever emit an unescaped backslash character?"
     Equivalence and precondition computation are decidable, we are working on
     practical programmer assistance tools for DReX.

It can be used either as a standalone application or as a Java library.

Building the Program

### Requirements

  1. Java SE >= 1.7
  2. Apache Maven >= 3.2.1

### Building and running DReX

Just run "mvn clean install" in the DReX directory. The DReX distribution
is divided into several parts: drex-core, drex-bench, drex-sa, and drex-front.
The build automatically invokes mvn in each directory and is expected to report 
that a number of tests passed.

drex-front Usage Guide

We are working on a more complete usage guide for drex-front. For now, the user
is referred to the example programs on


This software can be downloaded from
and the authors can be contacted at

  1. Mukund Raghothaman <>,
  2. Loris D'Antoni <>, and
  3. Arjun Radhakrishna <>.

License Information

This software is distributed under the terms indicated in the LICENSE file.

7 September 2015