Why not just use FSTs for combining syntactic and semantic analysis?
How useful this would be depends on the level of the Chomsky hierarchy at which the transducer operates:


Regular languages:


A Finite State Automaton (FSA) is represented by its transitions (e.g. via a diagram or a list of triples) and the corresponding transducer can be seen as adding an output to each of the transitions.

Hence, the output is at the same 'granularity' as the input alphabet, which may not always be what's desired for associating semantics with syntax.

The issue is not so much with the `redundant (epsilon) outputs' as the possible need to make semantic decisions at the level of sequences of syntactic elements, modeled in regular languages by a (necessarily fairly messy) nested transducer scheme.


Context-free grammars


More usefully than for regular languages, it is possible to use syntax-directed translation which can be seen as a `transducing' scheme associating a semantic output with a grammatical production.