
Fsa seemed to have no way of constructing the cross product of two acceptors, so I wrote a function that would do it. I think I must have handled the alphabets wrong, because when I concatenate such a transducer with others, I get arcs with 2147483647 for the label. Here's what I did: crossProduct is a function that maps the output labels of the first transducer and the input labels of the second transducer to epsilon, and then composes them. To map input labels and output labels to epsilon, I have two different classes extending ModifyAutomaton: EpsilonInputAutomaton replaces all of the arc input labels with Epsilon, and returns an empty Alphabet from getInputAlphabet. EpsilonOutputAutomaton does likewise with the outputs. Is there something obviously wrong with this that should lead to InvalidLabelId (which I think 2147483647 corresponds to) when I concatenate a transducer produced using my crossProduct function? Thanks, Roy