5

假设我有两个确定性有限状态自动机,由以下转换图表示:

关键字 IF 的 FSA: IF

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

ID 的 FSA: [AZ][A-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
4

1 回答 1

5

教科书通常给出自动机C,使得L(C) = L(A) U L(B)通过对其应用de-morgan,L(C) = (L(A) C [intersection] L(B) C ) C
交集是通过构建笛卡尔积自动机来完成的,否定只是简单地切换接受状态。
也可以直接构建联合自动机:构建笛卡尔积自动机,最终状态是(a,b)这样的状态,即OR 自动机中的最终状态是ORa自动机中的最终状态AbB

另一种方法是通过简单地创建一个新状态来构建一个非确定性最终自动机(NFA),并为 start(A) 和 start(B) 添加一个 epsilon 路径,并使用标准算法从自动机中消除非确定性.

问题 - 这个自动机不会是最小的(可能远非如此)。您可以尝试在生成的自动机上使用此算法以最小化它。

于 2012-06-26T06:44:12.243 回答