
Not for the faint of heart, Transductor is a finite-state morphophonology engine mainly for linguistics. If you have never heard of Kimmo Koskenniemi or the PC-KIMMO software from SIL International, or the Xerox Finite-state Tools then you probably have no use for it.
Transductor was originally a library version of PC-KIMMO; basically a KIMMO API. Originally a static library of routines for deriving strings based on an input string and any number of finite-state automata and/or transducers, plus vestigal support for morphology via RTN/ATN grammars. I realized some time ago that trying to hand tune a set of two-level rules for Sanskrit (one of my target languages) would be sheer folly. I finally forced myself to read and understand Kaplan & Kay, which led to a better understanding of the kinds of things the folks at Xerox are doing (à la Beesley and Karttunen).
I am in the middle of essentially my fourth rewrite of Transductor, the first two
being in Mac OS Classic C, the second a partial proof-of-concept
implementation in Ruby (!), and the current version is in Objective-C
and currently runs (when it runs at all) as a command-line Unix
application under GNUStep; it will eventally migrate to Mac OS X as a
framework. And yes, it is basically an open source reimplementation of
Xerox' xfst, which I suspect will remain closed source for the forseeable future.
Update December 2005 Transductor's getting closer to a developer release.
It's running on OS X and GNUstep, compiling context-sensitive rewrite rules
(no parallel replacement yet, sorry), and no longer leaking (much) memory.
I wrote a PERL script to autogenerate a testsuite to validate it against
xfst.
Here's a (quite large) screenshot
of one of my development machines running it.
I couldn't have done it without Graphviz!
Finite-state machines are complicated. They should cost, like, a hundred dollars each.