Take a look at the papers by Lauri Kartunnen et al (referenced fromhttp://www.xrce.xerox.com/competencies/content-analysis/fsCompiler/fsrefs.html)
... besides the papers, there's a suite of tools for transforming and
combining FSTs, but I don't know what's available outside Xerox
Research. The terminology is somewhat different from FSTs for
compilers, with the emphasis on building FSTs from components and
transforming them (e.g., using composition of FSTs: dictionary "ox",
transformed to "oxs" by plural rule, transformed to "oxen" by
special-case dictionary). Another author to look for: Koskenniemi.
[FSTs for Natural Language Processing tend to have 100s of thousands of
states, so optimization and combining techniques are very important.]