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
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
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 drexonline.com.
This software can be downloaded from https://bitbucket.org/strexpr/drex
and the authors can be contacted at
1. Mukund Raghothaman <email@example.com>,
2. Loris D'Antoni <firstname.lastname@example.org>, and
3. Arjun Radhakrishna <email@example.com>.
This software is distributed under the terms indicated in the LICENSE file.
7 September 2015