Как объединить два конечных автомата?

Скажем, у меня есть два детерминированных автомата конечного состояния, представленных следующими диаграммами перехода:

FSA for keyword IF: ЕСЛИ

  ___        ___         _
 /   \  I   /   \  F   // \\
>| 0 |----->| 1 |----->||2||
 \___/      \___/      \\_//

FSA for an ID: [A-Z] [А-Z0-9] *

            ------------
  ___       | _    LET |
 /   \ LET  // \\<------
>| 0 |----->||1||
 \___/      \\_//<------
            |      NUM |
            ------------

Какой алгоритм я могу использовать, чтобы объединить их в один детерминированный конечный автомат с тремя конечными состояниями, представленными следующей диаграммой переходов:

            -----------------------
            | LETTER BUT F OR NUM |   --------
  ___       | _          _   LET  v _ |  LET |
 /   \  I   // \\  F   // \\----->// \\<------
>| 0 |----->||1||----->||2||      ||3||<--------
 \___/      \\_//      \\_//----->\\_//<------ |
   |                         NUM  |      NUM | |
   | ANY LETTER OTHER THAN I      ------------ |
   ---------------------------------------------

1: ID
2: IF (IT'S ALSO AN ID, BUT THE KEYWORD IF HAS A HIGHER PRECEDENCE)
3: ID

Ответы на вопрос(1)

Ваш ответ на вопрос