Basic format

Basic format of FST, common to all MMDAgent variants and versions.

This page contains basic format description of .fst file.

See also the Scenario FST page about how to set up and extended use.


.fst file is a text file that contains arc definitions each per line:

state to input output

where state is a state number where the arc exists, to is the target state number of the arc, input is the input message to be matched, and output is the message to be output when this transition occurs. The initial state number is fixed to 0.

Fields should be separated by a sequence of space or tab. To include a space within an argument, embrace the field with "".

100 110  RECOG_EVENT_STOP|weather SYNTH_START|mei|normal|"Hi, how are you"

<eps> is a special string for epsilon (“void”) symbol. <eps> at input means that the arc will be executed immediately just after current state has moved to the state. <eps> at output means no output.

110 120  <eps>  SYNTH_START|mei|normal|"Hi, how are you"

When specifying multiple items in a message with comma, all the items in the field shoul match.

#### for input "RECOG_EVENT_STOP|today,is,sunday,"
# this matches
100 110  RECOG_EVENT_STOP|sunday SYNTH_START|mei|normal|hi
# this does not match
100 110  RECOG_EVENT_STOP|like,sunday SYNTH_START|mei|normal|hi

When defining multiple arcs on a state, order is important! At run time, matching will be checked for all arcs in the order of the definition in fst, and the first matched one will be chosen. For example,

100 120 MESSAGE|foo,bar <eps>
100 130 MESSAGE|bar <eps>

an input message “MESSAGE|foo,bar” will be captured at the first arc, and “MESSAGE|bar “will be captured at the second arc.

Using local variable

You can also define additional field to enter a value to “local variables”.

state to input output ${varname}=string

The local variables are internal that can be used inside the FST. The format should be ${varname}=string. No space around =. Only alphabets, numerics and underbar character can be used as variable names. Here is an example:

0 10  <eps> <eps> ${place}=Nagoya

Use comma to set multiple variables:

210 220  <eps> <eps> ${src}=Nara,${dst}=Tokyo,${pref}=nozomi

The variables can be referred as ${varname} in the message field of the FST. The string ${varname} in FST will be replaced to the current value if the variable at run time.

100 110  RECOG_EVENT_STOP|${place} ...

You can also use a variable to set another variable:

10 20 <eps> <eps> ${target}=${place}

At run time you can see the list of current local variables at FST log window (Shift+F in desktop). Also the values will be also output to log.

Using regular expression

Regular expression is supported at the third field (input message). Embracing with @ to treat the field text as regular expression, and the input messages are checked if it matches the expression.

Here is an example that captures any recognition result that contains “station” or “Station”.

180 200  @RECOG_EVENT_STOP\|.*[Ss]tation.*@  MOTION_START|mei|base|greeting.vmd
  • The regular expression should be in Google RE2 format
  • The regular expression should be full match
  • As in the example, message delimiter | should be escaped inside regular expression

The matched part can be extracted as local variable ${1}, ${2} and so on. The group or sub-match region defined by () in the expression will be stored automatically. Here is a modification of the example above that sets the station name (i.e, recognized word before “station”) to the variable ${station}.

180 200  @RECOG_EVENT_STOP\|.*?([^,]*),?[Ss]tation.*@  MOTION_START|mei|base|greeting.vmd  ${station}=${1}

Another examples:

# Store the whole recognition result to ${s}
0 1 @RECOG_EVENT_STOP\|(.*)@ <eps> ${s}=${1}
# Capture motion target model name to ${model} and motion name to ${motion}
0 1 @MOTION_EVENT_ADD\|(.*)\|(.*)@ <eps> ${model}=${1},${motion}=${2}

最終更新 2021.01.08: copied en to ja (adefa8b)