This article summarizes and updates various previous articles  related to the implementation of a java weighted finite states transducers framework that can use existing openFst  models or export java fst object to openFst format and which is available at the CMUSphinx SVN reopsitory at .
The following sections include brief descriptions of the main parts and functionality of the framework. In addition to these descriptions, the full java docs are available at 
As described in  the fst’s states and arcs weights may represent any set so long as they form a semiring. The semirings related classes are located in
There are 3 different semiring implementations
ProbabilitySemiring all inheriting the abstract
Semiring class and all of them accept float values.
2. Basic fst classes
The basic fst classes are located under the
There exist a mutable and an immutable fst implementations in
ImmutableFst classes respectively. The mutable fst holds an ArrayList of
State objects allowing additions/deletions. On the other hand the immutable fst holds a fixed size array of
ImmutableState objects not allowing additions/deletions.
Similar to the mutable and immutable fst implementations above, a mutable
State object holds its outgoing
Arc objects in an ArrayList allowing additions/deletions, in contrast with an
ImmutableState which holds its outgoing
Arc objects in a fixed size array not allowing additions/deletions.
Arc class implement the fst’s arc functionality, containing basically properties and their getters and setters methods.
3. Fst operations
The supported fst operations are located under the
edu.cmu.sphinx.fst.operations package and include the following classes
ArcSort Sorts the arcs in an FST per state. Sorting can be applied either on input or output label based on the provided comparator.
Compose Computes the composition of two Fsts. The two Fsts are augmented in order to avoid multiple epsilon paths in the resulting Fst. 
Connect Trims an Fst, removing states and arcs that are not on successful paths.
Determinize Determinizes an fst providing an equivalent fst that has the property that no state has two transitions with the same input label. For this algorithm, epsilon transitions are treated as regular symbols. 
ExtendFinal Adds a new final state with a 0.0 (Semiring’s 1) final wight and connects the current final states to it using epsilon transitions with weight equal to the original final state’s weight.
NShortestPaths Calculates the shortest distances from each state to the final. 
Project Projects an fst onto its domain or range by either copying each arc’s input label to its output label or vice versa.
Reverse Reverses an fst.
RmEpsilon Removes epsilon transitions from an fst. It return a new epsilon-free fst and does not modify the original fst
4. Working with openFst models
edu.cmu.sphinx.fst.openfst package provides the required methods to read (
importFst) or write (
exportFst) an openFst model in text format. In the same package there are also two additional classes named
Export for exposing the import/export functionality through main functions to a shell command.
The java fst framework described in this article and its implemented functionality, were created for the needs of the to the new grapheme-to-phoneme (g2p) feature in CMU Sphinx-4 speech recognizer .
It’s usage and extensive testing in the sphinx-4 g2p decoder suggest that the java fst framework and its implemented functionality are usable in general, although it may luck functionality required in different applications (eg. additional operations).
 M. Mohri, “Weighted automata algorithms”, Handbook of Weighted Automata. Springer, pp. 213-250, 2009.
 M. Mohri, “Finite-State Transducers in Language and Speech Processing”, Computational Linguistics, 23:2, 1997.
 M. Mohri, “Semiring Framework and Algorithms for Shortest-Distance Problems”, Journal of Automata, Languages and Combinatorics, 7(3), pp. 321-350, 2002.
 J. Salatas, “Using the grapheme-to-phoneme feature in CMU Sphinx-4”, ICT Research Blog, May 2012.