编译原理: 最小化 DFA(划分) & 验证 DFA(Kleene 闭包)

编译原理: 最小化 DFA(划分) & 验证 DFA(Kleene 闭包)

简介

作为正则表达式转 DFA 三部曲的最后一部,本篇将解说四个步骤:

  1. Thompson 构造法:正则表达式 RegExp -> 不确定有限状态机 NFA
  2. 子集构造法:不确定有限状态机 NFA -> 确定有限状态机 DFA
  3. 最小化:最小化确定有限状态机 DFA
  4. 验证:DFA 转换为的等价正则表达式并验证等价

中的最后两步:最小化验证

参考

编译原理-DFA与正规式的转化https://www.cnblogs.com/mznsndy/p/10742827.html

正文

示例回顾

我们在前两部使用了两个例子作为范例,完成了从正则表达式 -> NFA -> DFA 的转换,最终结果是一张 DFA 图:

示例1: a ( b ∣ c ) ∗ a(b|c)^{*} a(bc)


示例2: ( a ∣ b ) ∗ a b b (a|b)^{*}abb (ab)abb


然而这样构建出来的 DFA 其实还存在相当大的冗余部分,接下来我们就要透过Kleene 闭包最小化 DFA,同时验证简化后的 DFA 和原来的正则表达式是等价的。

最小化 DFA(划分)

怎么划分?

直接上伪代码

Min-DFA(Dtran)
    let U = {S\F, F} # 初始的等价类有两个组,分别是非终止状态和终止状态
    for (G in U) { # 对等价类中每个组做划分
        while (G can be divided) {
            g1, g2, g3, ... = divide(G)
            remove G from U
            add g1, g2, g3, ... into U
        }
    }
  1. 首先将上面的 DFA 分为非终止状态和终止状态两组,然后对每一组进行检查是否能够再做划分,若可则对划分后的组再划分,直到不可再划分
  2. 最后根据划分后的组重建 Dtran 表并重绘 DFA 图
  • 这边需要说明一下不可划分的概念:

    若对于组内所有状态,对于所有输入都有相同的输出状态,则称该组不可再被划分

其实简单的看就是当 Dtran 右侧的转移函数的相同时就可以被分为一组

最小化示例

示例1: a ( b ∣ c ) ∗ a(b|c)^{*} a(bc)

首先根据是否为终止状态(是否包含 a10)划分为两组: U = { { A } , { B , C , D } } U = \{\{A\},\{B,C,D\}\} U={{A},{B,C,D}}

接下来我们发现对于组 B , C , D {B,C,D} B,C,D 中的每一个状态,对于同一个输入都有同样的输出状态( D t r a n [ X , b ] = C , D t r a n [ X , c ] = D Dtran[X,b]=C, Dtran[X,c]=D Dtran[X,b]=C,Dtran[X,c]=D),则组 B , C , D {B,C,D} B,C,D 不可再被划分了,因此最终划分便是 U = { { A } , { B , C , D } } U = \{\{A\},\{B,C,D\}\} U={{A},{B,C,D}}

我们使用 B ′ B^{'} B 来取代原来 B , C , D B,C,D B,C,D 的位置并重建 D t r a n Dtran Dtran D F A DFA DFA

示例2: ( a ∣ b ) ∗ a b b (a|b)^{*}abb (ab)abb

初始划分为 U = { { A , B , C , D } , { E } } U = \{\{A,B,C,D\},\{E\}\} U={{A,B,C,D},{E}},然后我们发现只有 A , C A,C A,C 的转换函数结果完全相同( D t r a n [ A ∣ C , a ] = B , D t r a n [ A ∣ C , b ] = C Dtran[A|C,a]=B, Dtran[A|C,b]=C Dtran[AC,a]=B,Dtran[AC,b]=C),则我们使用 A ′ A^{'} A 来取代 A , C A,C A,C,最终划分为 U = { A ′ : { A , C } , { B } , { D } , { E } } U = \{A^{'}: \{A,C\},\{B\},\{D\},\{E\}\} U={A:{A,C},{B},{D},{E}},新的 D t r a n Dtran Dtran D F A DFA DFA 如下

验证 DFA

接下来我们要验证我们最小化后的 DFA 与原来的正则表达式是等价的,我们将使用 Kleene 闭包来完成这个动作

Kleene 闭包定义 R i j k R_{ij}^{k} Rijk

  • 符号定义: R i j k R_{ij}^{k} Rijk ⊘ \oslash ϵ \epsilon ϵ

    1. R i j k R_{ij}^{k} Rijk 表示 Kleene 闭包

      我们将 DFA 中所有节点依序编号为为 0 ∼ n − 1 0 \sim n - 1 0n1

      R i j k R_{ij}^{k} Rijk 则表示从节点 i i i 到节点 j j j 途中经过小于等于编号为 k k k 的中间节点可达的所有路径

    2. ⊘ \oslash 表示路径不可达
      对于路径不可达的并( ∣ | 和)连接( ∩ \cap )操作有以下结果:

      • 并: ⊘ ∣ a = a \oslash | a = a a=a
      • 连接: ⊘ a = ⊘ \oslash a = \oslash a=

      注意:不可达 ⊘ \oslash 与空串 ϵ \epsilon ϵ 不同

      • ϵ ∣ a = a \epsilon | a = a ϵa=a
      • ϵ a = a \epsilon a = a ϵa=a
    3. ϵ \epsilon ϵ 表示空路径,即状态不发生变化的边(回到同一状态)

  • Kleene 初始化 k = − 1 k = -1 k=1

    而接下来我们介绍 Kleene 闭包的初始化状态

    R i j − 1 R_{ij}^{-1} Rij1 表示从节点 i i i 到节点 j j j 不经过任意节点的所有路径

    以下为初始化状态的示例

    R i j − 1 = a ∣ b ∣ c R_{ij}^{-1} = a|b|c Rij1=abc

    R i j − 1 = ⊘ R_{ij}^{-1} = \oslash Rij1=

    R i i − 1 = a ∣ ϵ R_{ii}^{-1} = a|\epsilon Rii1=aϵ

    R i i − 1 = ϵ R_{ii}^{-1} = \epsilon Rii1=ϵ

    我们可以看到当出节点和入节点相同时( i = j i = j i=j),路径中必然存在一个 ϵ \epsilon ϵ

  • Kleene 递归步

    k = − 1 k = -1 k=1时表示不经过任何中间节点,接下来我们就慢慢的让中间节点的编号限制( k k k)慢慢向上累加,核心公式如下:

    R i j k = R i k k − 1 ( R k k k − 1 ) ∗ R k j k − 1 ∣ R i j k − 1 R_{ij}^{k} = R_{ik}^{k-1}(R_{kk}^{k-1})^{\ast}R_{kj}^{k-1}|R_{ij}^{k-1} Rijk=Rikk1(Rkkk1)Rkjk1Rijk1

    这个转换式的意思就是新的经过 k k k 以下的中间节点的结果就是旧的路径经过 k − 1 k-1 k1 的中间节点与原路径的并,如下图所示

有了 Kleene 闭包,我们就可以来找 s s s(起始节点)到 t t t 终止节点

重建 RE 并验证等价

接下来所谓的重建其实就是透过 Kleene 闭包来重建正则表达式,也就是说我们要找的目标就是 R i j k , i = s 0 , j = f , k = S R_{ij}^{k}, i=s0, j=f, k=S Rijk,i=s0,j=f,k=S,我们透过不断增加 k k k 值来找到我们的最终结果,接下来直接使用示例来解说吧(在此我们先将示例的状态重新编号)

示例1: a ( b ∣ c ) ∗ a(b|c)^{*} a(bc)

  • 初始化状态: k = − 1 k = -1 k=1

    R 00 − 1 = ϵ R_{00}^{-1} = \epsilon R001=ϵ
    R 01 − 1 = a R_{01}^{-1} = a R011=a
    R 10 − 1 = ⊘ R_{10}^{-1} = \oslash R101=
    R 11 − 1 = b ∣ c ∣ ϵ R_{11}^{-1} = b|c|\epsilon R111=bcϵ

  • k = 0 k = 0 k=0

    R 00 0 = R 00 − 1 ( R 00 − 1 ) ∗ R 00 − 1 ∣ R 00 − 1 = ϵ ( ϵ ) ∗ ϵ = ϵ R_{00}^{0} = R_{00}^{-1} (R_{00}^{-1})^{\ast} R_{00}^{-1} | R_{00}^{-1} = \epsilon (\epsilon)^{\ast} \epsilon = \epsilon R000=R001(R001)R001R001=ϵ(ϵ)ϵ=ϵ
    R 01 0 = R 00 − 1 ( R 00 − 1 ) ∗ R 01 − 1 ∣ R 01 − 1 = ϵ ( ϵ ) ∗ a = a R_{01}^{0} = R_{00}^{-1} (R_{00}^{-1})^{\ast} R_{01}^{-1} | R_{01}^{-1} = \epsilon (\epsilon)^{\ast} a = a R010=R001(R001)R011R011=ϵ(ϵ)a=a
    R 10 0 = R 10 − 1 ( R 00 − 1 ) ∗ R 00 − 1 ∣ R 10 − 1 = ⊘ ( ϵ ) ∗ ⊘ = ⊘ R_{10}^{0} = R_{10}^{-1} (R_{00}^{-1})^{\ast} R_{00}^{-1} | R_{10}^{-1} = \oslash (\epsilon)^{\ast} \oslash = \oslash R100=R101(R001)R001R101=(ϵ)=
    R 11 0 = R 10 − 1 ( R 00 − 1 ) ∗ R 01 − 1 ∣ R 11 − 1 = ⊘ ( ϵ ) ∗ ( b ∣ c ∣ ϵ ) = b ∣ c ∣ ϵ R_{11}^{0} = R_{10}^{-1} (R_{00}^{-1})^{\ast} R_{01}^{-1} | R_{11}^{-1} = \oslash (\epsilon)^{\ast} (b|c|\epsilon) = b|c|\epsilon R110=R101(R001)R011R111=(ϵ)(bcϵ)=bcϵ

  • k = 1 k = 1 k=1

    R 00 1 = R 01 0 ( R 11 0 ) ∗ R 00 0 ∣ R 10 0 = a ( b ∣ c ∣ ϵ ) ∗ ⊘ ∣ ϵ = ϵ R_{00}^{1} = R_{01}^{0} (R_{11}^{0})^{\ast} R_{00}^{0} | R_{10}^{0} = a (b|c|\epsilon)^{\ast} \oslash|\epsilon = \epsilon R001=R010(R110)R000R100=a(bcϵ)ϵ=ϵ
    R 01 1 = R 01 0 ( R 11 0 ) ∗ R 01 0 ∣ R 11 0 = a ( b ∣ c ∣ ϵ ) ∗ ( b ∣ c ∣ ϵ ) ∣ a = a ( b ∣ c ) ∗ R_{01}^{1} = R_{01}^{0} (R_{11}^{0})^{\ast} R_{01}^{0} | R_{11}^{0} = a (b|c|\epsilon)^{\ast} (b|c|\epsilon)|a = a(b|c)^{\ast} R011=R010(R110)R010R110=a(bcϵ)(bcϵ)a=a(bc)
    R 10 1 = R 11 0 ( R 11 0 ) ∗ R 00 0 ∣ R 10 0 = ( b ∣ c ∣ ϵ ) ( b ∣ c ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{10}^{1} = R_{11}^{0} (R_{11}^{0})^{\ast} R_{00}^{0} | R_{10}^{0} = (b|c|\epsilon) (b|c|\epsilon)^{\ast} \oslash|\oslash = \oslash R101=R110(R110)R000R100=(bcϵ)(bcϵ)=
    R 11 1 = R 11 0 ( R 11 0 ) ∗ R 01 0 ∣ R 11 0 = ( b ∣ c ∣ ϵ ) ( b ∣ c ∣ ϵ ) ∗ ( b ∣ c ∣ ϵ ) ∣ ( b ∣ c ∣ ϵ ) = ( b ∣ c ) ∗ R_{11}^{1} = R_{11}^{0} (R_{11}^{0})^{\ast} R_{01}^{0} | R_{11}^{0} = (b|c|\epsilon) (b|c|\epsilon)^{\ast} (b|c|\epsilon)|(b|c|\epsilon) = (b|c)^{\ast} R111=R110(R110)R010R110=(bcϵ)(bcϵ)(bcϵ)(bcϵ)=(bc)

最后我们使用 Kleene 闭包重建出来的正则表达式 R 01 1 = a ( b ∣ c ) ∗ R_{01}^{1} = a(b|c)^{\ast} R011=a(bc) 与原表达式相同,证明新的 DFA 与原正则表达式为等价。

示例2: ( a ∣ b ) ∗ a b b (a|b)^{*}abb (ab)abb

  • 初始化状态: k = − 1 k = -1 k=1

    R 00 − 1 = b ∣ ϵ R_{00}^{-1} = b|\epsilon R001=bϵ
    R 01 − 1 = a R_{01}^{-1} = a R011=a
    R 02 − 1 = ⊘ R_{02}^{-1} = \oslash R021=
    R 03 − 1 = ⊘ R_{03}^{-1} = \oslash R031=
    R 10 − 1 = ⊘ R_{10}^{-1} = \oslash R101=
    R 11 − 1 = a ∣ ϵ R_{11}^{-1} = a|\epsilon R111=aϵ
    R 12 − 1 = b R_{12}^{-1} = b R121=b
    R 13 − 1 = ⊘ R_{13}^{-1} = \oslash R131=
    R 20 − 1 = ⊘ R_{20}^{-1} = \oslash R201=
    R 21 − 1 = a R_{21}^{-1} = a R211=a
    R 22 − 1 = ϵ R_{22}^{-1} = \epsilon R221=ϵ
    R 23 − 1 = b R_{23}^{-1} = b R231=b
    R 30 − 1 = b R_{30}^{-1} = b R301=b
    R 31 − 1 = a R_{31}^{-1} = a R311=a
    R 32 − 1 = ⊘ R_{32}^{-1} = \oslash R321=
    R 33 − 1 = ϵ R_{33}^{-1} = \epsilon R331=ϵ

  • k = 0 k = 0 k=0

    R 00 0 = R 00 − 1 ( R 00 − 1 ) ∗ R 00 − 1 ∣ R 00 − 1 = ( b ∣ ϵ ) ( b ∣ ϵ ) ∗ ( b ∣ ϵ ) ∣ ( b ∣ ϵ ) = b ∗ R_{00}^{0} = R_{00}^{-1} (R_{00}^{-1})^{\ast} R_{00}^{-1} | R_{00}^{-1} = (b|\epsilon) (b|\epsilon)^{\ast} (b|\epsilon) | (b|\epsilon) = b^{\ast} R000=R001(R001)R001R001=(bϵ)(bϵ)(bϵ)(bϵ)=b
    R 01 0 = R 00 − 1 ( R 00 − 1 ) ∗ R 01 − 1 ∣ R 01 − 1 = ( b ∣ ϵ ) ( b ∣ ϵ ) ∗ a ∣ a = b ∗ a R_{01}^{0} = R_{00}^{-1} (R_{00}^{-1})^{\ast} R_{01}^{-1} | R_{01}^{-1} = (b|\epsilon) (b|\epsilon)^{\ast} a | a = b^{\ast}a R010=R001(R001)R011R011=(bϵ)(bϵ)aa=ba
    R 02 0 = R 00 − 1 ( R 00 − 1 ) ∗ R 02 − 1 ∣ R 02 − 1 = ( b ∣ ϵ ) ( b ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{02}^{0} = R_{00}^{-1} (R_{00}^{-1})^{\ast} R_{02}^{-1} | R_{02}^{-1} = (b|\epsilon) (b|\epsilon)^{\ast} \oslash | \oslash = \oslash R020=R001(R001)R021R021=(bϵ)(bϵ)=
    R 03 0 = R 00 − 1 ( R 00 − 1 ) ∗ R 03 − 1 ∣ R 03 − 1 = ( b ∣ ϵ ) ( b ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{03}^{0} = R_{00}^{-1} (R_{00}^{-1})^{\ast} R_{03}^{-1} | R_{03}^{-1} = (b|\epsilon) (b|\epsilon)^{\ast} \oslash | \oslash = \oslash R030=R001(R001)R031R031=(bϵ)(bϵ)=
    R 10 0 = R 10 − 1 ( R 00 − 1 ) ∗ R 00 − 1 ∣ R 10 − 1 = ⊘ ( b ∣ ϵ ) ∗ ( b ∣ ϵ ) ∣ ⊘ = ⊘ R_{10}^{0} = R_{10}^{-1} (R_{00}^{-1})^{\ast} R_{00}^{-1} | R_{10}^{-1} = \oslash (b|\epsilon)^{\ast} (b|\epsilon) | \oslash = \oslash R100=R101(R001)R001R101=(bϵ)(bϵ)=
    R 11 0 = R 10 − 1 ( R 00 − 1 ) ∗ R 01 − 1 ∣ R 11 − 1 = ⊘ ( b ∣ ϵ ) ∗ a ∣ ( a ∣ ϵ ) = a ∣ ϵ R_{11}^{0} = R_{10}^{-1} (R_{00}^{-1})^{\ast} R_{01}^{-1} | R_{11}^{-1} = \oslash (b|\epsilon)^{\ast} a | (a|\epsilon) = a|\epsilon R110=R101(R001)R011R111=(bϵ)a(aϵ)=aϵ
    R 12 0 = R 10 − 1 ( R 00 − 1 ) ∗ R 02 − 1 ∣ R 12 − 1 = ⊘ ( b ∣ ϵ ) ∗ ⊘ ∣ b = b R_{12}^{0} = R_{10}^{-1} (R_{00}^{-1})^{\ast} R_{02}^{-1} | R_{12}^{-1} = \oslash (b|\epsilon)^{\ast} \oslash | b = b R120=R101(R001)R021R121=(bϵ)b=b
    R 13 0 = R 10 − 1 ( R 00 − 1 ) ∗ R 03 − 1 ∣ R 13 − 1 = ⊘ ( b ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{13}^{0} = R_{10}^{-1} (R_{00}^{-1})^{\ast} R_{03}^{-1} | R_{13}^{-1} = \oslash (b|\epsilon)^{\ast} \oslash | \oslash = \oslash R130=R101(R001)R031R131=(bϵ)=
    R 20 0 = R 20 − 1 ( R 00 − 1 ) ∗ R 00 − 1 ∣ R 20 − 1 = ⊘ ( b ∣ ϵ ) ∗ ( b ∣ ϵ ) ∣ ⊘ = ⊘ R_{20}^{0} = R_{20}^{-1} (R_{00}^{-1})^{\ast} R_{00}^{-1} | R_{20}^{-1} = \oslash (b|\epsilon)^{\ast} (b|\epsilon) | \oslash = \oslash R200=R201(R001)R001R201=(bϵ)(bϵ)=
    R 21 0 = R 20 − 1 ( R 00 − 1 ) ∗ R 01 − 1 ∣ R 21 − 1 = ⊘ ( b ∣ ϵ ) ∗ a ∣ a = a R_{21}^{0} = R_{20}^{-1} (R_{00}^{-1})^{\ast} R_{01}^{-1} | R_{21}^{-1} = \oslash (b|\epsilon)^{\ast} a | a = a R210=R201(R001)R011R211=(bϵ)aa=a
    R 22 0 = R 20 − 1 ( R 00 − 1 ) ∗ R 02 − 1 ∣ R 22 − 1 = ⊘ ( b ∣ ϵ ) ∗ ⊘ ∣ ϵ = ϵ R_{22}^{0} = R_{20}^{-1} (R_{00}^{-1})^{\ast} R_{02}^{-1} | R_{22}^{-1} = \oslash (b|\epsilon)^{\ast} \oslash | \epsilon = \epsilon R220=R201(R001)R021R221=(bϵ)ϵ=ϵ
    R 23 0 = R 20 − 1 ( R 00 − 1 ) ∗ R 03 − 1 ∣ R 23 − 1 = ⊘ ( b ∣ ϵ ) ∗ ⊘ ∣ b = b R_{23}^{0} = R_{20}^{-1} (R_{00}^{-1})^{\ast} R_{03}^{-1} | R_{23}^{-1} = \oslash (b|\epsilon)^{\ast} \oslash | b = b R230=R201(R001)R031R231=(bϵ)b=b
    R 30 0 = R 30 − 1 ( R 00 − 1 ) ∗ R 00 − 1 ∣ R 30 − 1 = b ( b ∣ ϵ ) ∗ ( b ∣ ϵ ) ∣ b = b ∗ R_{30}^{0} = R_{30}^{-1} (R_{00}^{-1})^{\ast} R_{00}^{-1} | R_{30}^{-1} = b (b|\epsilon)^{\ast} (b|\epsilon) | b = b^{\ast} R300=R301(R001)R001R301=b(bϵ)(bϵ)b=b
    R 31 0 = R 30 − 1 ( R 00 − 1 ) ∗ R 01 − 1 ∣ R 31 − 1 = b ( b ∣ ϵ ) ∗ a ∣ a = b ∗ a R_{31}^{0} = R_{30}^{-1} (R_{00}^{-1})^{\ast} R_{01}^{-1} | R_{31}^{-1} = b (b|\epsilon)^{\ast} a | a = b^{\ast}a R310=R301(R001)R011R311=b(bϵ)aa=ba
    R 32 0 = R 30 − 1 ( R 00 − 1 ) ∗ R 02 − 1 ∣ R 32 − 1 = b ( b ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{32}^{0} = R_{30}^{-1} (R_{00}^{-1})^{\ast} R_{02}^{-1} | R_{32}^{-1} = b (b|\epsilon)^{\ast} \oslash | \oslash = \oslash R320=R301(R001)R021R321=b(bϵ)=
    R 33 0 = R 30 − 1 ( R 00 − 1 ) ∗ R 03 − 1 ∣ R 33 − 1 = b ( b ∣ ϵ ) ∗ ⊘ ∣ ϵ = ϵ R_{33}^{0} = R_{30}^{-1} (R_{00}^{-1})^{\ast} R_{03}^{-1} | R_{33}^{-1} = b (b|\epsilon)^{\ast} \oslash | \epsilon = \epsilon R330=R301(R001)R031R331=b(bϵ)ϵ=ϵ

  • k = 1 k = 1 k=1

    R 00 1 = R 01 0 ( R 11 0 ) ∗ R 10 0 ∣ R 00 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ ⊘ ∣ b ∗ = b ∗ R_{00}^{1} = R_{01}^{0} (R_{11}^{0})^{\ast} R_{10}^{0} | R_{00}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} \oslash | b^{\ast} = b^{\ast} R001=R010(R110)R100R000=(ba)(aϵ)b=b
    R 01 1 = R 01 0 ( R 11 0 ) ∗ R 11 0 ∣ R 01 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ ( a ∣ ϵ ) ∣ ( b ∗ a ) = b ∗ a + R_{01}^{1} = R_{01}^{0} (R_{11}^{0})^{\ast} R_{11}^{0} | R_{01}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} (a|\epsilon) | (b^{\ast}a) = b^{\ast}a^{+} R011=R010(R110)R110R010=(ba)(aϵ)(aϵ)(ba)=ba+
    R 02 1 = R 01 0 ( R 11 0 ) ∗ R 12 0 ∣ R 02 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ b ∣ ⊘ = b ∗ a + b R_{02}^{1} = R_{01}^{0} (R_{11}^{0})^{\ast} R_{12}^{0} | R_{02}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} b | \oslash = b^{\ast}a^{+}b R021=R010(R110)R120R020=(ba)(aϵ)b=ba+b
    R 03 1 = R 01 0 ( R 11 0 ) ∗ R 13 0 ∣ R 03 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{03}^{1} = R_{01}^{0} (R_{11}^{0})^{\ast} R_{13}^{0} | R_{03}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} \oslash | \oslash = \oslash R031=R010(R110)R130R030=(ba)(aϵ)=
    R 10 1 = R 11 0 ( R 11 0 ) ∗ R 10 0 ∣ R 10 0 = ( a ∣ ϵ ) ( a ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{10}^{1} = R_{11}^{0} (R_{11}^{0})^{\ast} R_{10}^{0} | R_{10}^{0} = (a|\epsilon) (a|\epsilon)^{\ast} \oslash | \oslash = \oslash R101=R110(R110)R100R100=(aϵ)(aϵ)=
    R 11 1 = R 11 0 ( R 11 0 ) ∗ R 11 0 ∣ R 11 0 = ( a ∣ ϵ ) ( a ∣ ϵ ) ∗ ( a ∣ ϵ ) ∣ ( a ∣ ϵ ) = a ∗ R_{11}^{1} = R_{11}^{0} (R_{11}^{0})^{\ast} R_{11}^{0} | R_{11}^{0} = (a|\epsilon) (a|\epsilon)^{\ast} (a|\epsilon) | (a|\epsilon) = a^{\ast} R111=R110(R110)R110R110=(aϵ)(aϵ)(aϵ)(aϵ)=a
    R 12 1 = R 11 0 ( R 11 0 ) ∗ R 12 0 ∣ R 12 0 = ( a ∣ ϵ ) ( a ∣ ϵ ) ∗ b ∣ b = a ∗ b R_{12}^{1} = R_{11}^{0} (R_{11}^{0})^{\ast} R_{12}^{0} | R_{12}^{0} = (a|\epsilon) (a|\epsilon)^{\ast} b | b = a^{\ast}b R121=R110(R110)R120R120=(aϵ)(aϵ)bb=ab
    R 13 1 = R 11 0 ( R 11 0 ) ∗ R 13 0 ∣ R 13 0 = ( a ∣ ϵ ) ( a ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{13}^{1} = R_{11}^{0} (R_{11}^{0})^{\ast} R_{13}^{0} | R_{13}^{0} = (a|\epsilon) (a|\epsilon)^{\ast} \oslash | \oslash = \oslash R131=R110(R110)R130R130=(aϵ)(aϵ)=
    R 20 1 = R 21 0 ( R 11 0 ) ∗ R 10 0 ∣ R 20 0 = a ( a ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{20}^{1} = R_{21}^{0} (R_{11}^{0})^{\ast} R_{10}^{0} | R_{20}^{0} = a (a|\epsilon)^{\ast} \oslash | \oslash = \oslash R201=R210(R110)R100R200=a(aϵ)=
    R 21 1 = R 21 0 ( R 11 0 ) ∗ R 11 0 ∣ R 21 0 = a ( a ∣ ϵ ) ∗ ( a ∣ ϵ ) ∣ a = a + R_{21}^{1} = R_{21}^{0} (R_{11}^{0})^{\ast} R_{11}^{0} | R_{21}^{0} = a (a|\epsilon)^{\ast} (a|\epsilon) | a = a^{+} R211=R210(R110)R110R210=a(aϵ)(aϵ)a=a+
    R 22 1 = R 21 0 ( R 11 0 ) ∗ R 12 0 ∣ R 22 0 = a ( a ∣ ϵ ) ∗ b ∣ ϵ = a + b ∣ ϵ R_{22}^{1} = R_{21}^{0} (R_{11}^{0})^{\ast} R_{12}^{0} | R_{22}^{0} = a (a|\epsilon)^{\ast} b | \epsilon = a^{+}b|\epsilon R221=R210(R110)R120R220=a(aϵ)bϵ=a+bϵ
    R 23 1 = R 21 0 ( R 11 0 ) ∗ R 13 0 ∣ R 23 0 = a ( a ∣ ϵ ) ∗ ⊘ ∣ b = b R_{23}^{1} = R_{21}^{0} (R_{11}^{0})^{\ast} R_{13}^{0} | R_{23}^{0} = a (a|\epsilon)^{\ast} \oslash | b = b R231=R210(R110)R130R230=a(aϵ)b=b
    R 30 1 = R 31 0 ( R 11 0 ) ∗ R 10 0 ∣ R 30 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ ⊘ ∣ b ∗ = b ∗ R_{30}^{1} = R_{31}^{0} (R_{11}^{0})^{\ast} R_{10}^{0} | R_{30}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} \oslash | b^{\ast} = b^{\ast} R301=R310(R110)R100R300=(ba)(aϵ)b=b
    R 31 1 = R 31 0 ( R 11 0 ) ∗ R 11 0 ∣ R 31 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ ( a ∣ ϵ ) ∣ ( b ∗ a ) = b ∗ a + R_{31}^{1} = R_{31}^{0} (R_{11}^{0})^{\ast} R_{11}^{0} | R_{31}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} (a|\epsilon) | (b^{\ast}a) = b^{\ast}a^{+} R311=R310(R110)R110R310=(ba)(aϵ)(aϵ)(ba)=ba+
    R 32 1 = R 31 0 ( R 11 0 ) ∗ R 12 0 ∣ R 32 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ b ∣ ⊘ = b ∗ a + b R_{32}^{1} = R_{31}^{0} (R_{11}^{0})^{\ast} R_{12}^{0} | R_{32}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} b | \oslash = b^{\ast}a^{+}b R321=R310(R110)R120R320=(ba)(aϵ)b=ba+b
    R 33 1 = R 31 0 ( R 11 0 ) ∗ R 13 0 ∣ R 33 0 = ( b ∗ a ) ( a ∣ ϵ ) ∗ ⊘ ∣ ϵ = ϵ R_{33}^{1} = R_{31}^{0} (R_{11}^{0})^{\ast} R_{13}^{0} | R_{33}^{0} = (b^{\ast}a) (a|\epsilon)^{\ast} \oslash | \epsilon = \epsilon R331=R310(R110)R130R330=(ba)(aϵ)ϵ=ϵ

  • k = 2 k = 2 k=2

    R 00 2 = R 02 1 ( R 22 1 ) ∗ R 20 1 ∣ R 00 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ ⊘ ∣ b ∗ = b ∗ R_{00}^{2} = R_{02}^{1} (R_{22}^{1})^{\ast} R_{20}^{1} | R_{00}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} \oslash | b^{\ast} = b^{\ast} R002=R021(R221)R201R001=(ba+b)(a+bϵ)b=b
    R 01 2 = R 02 1 ( R 22 1 ) ∗ R 21 1 ∣ R 01 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ a + ∣ ( b ∗ a + ) = b ∗ a + ( ( b a + ) + ∣ ϵ ) R_{01}^{2} = R_{02}^{1} (R_{22}^{1})^{\ast} R_{21}^{1} | R_{01}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} a^{+} | (b^{\ast}a^{+}) = b^{\ast}a^{+}((ba^{+})^{+}|\epsilon) R012=R021(R221)R211R011=(ba+b)(a+bϵ)a+(ba+)=ba+((ba+)+ϵ)
    R 02 2 = R 02 1 ( R 22 1 ) ∗ R 22 1 ∣ R 02 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ ( a + b ∣ ϵ ) ∣ ( b ∗ a + b ) = b ∗ ( a + b ) + R_{02}^{2} = R_{02}^{1} (R_{22}^{1})^{\ast} R_{22}^{1} | R_{02}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} (a^{+}b|\epsilon) | (b^{\ast}a^{+}b) = b^{\ast}(a^{+}b)^{+} R022=R021(R221)R221R021=(ba+b)(a+bϵ)(a+bϵ)(ba+b)=b(a+b)+
    R 03 2 = R 02 1 ( R 22 1 ) ∗ R 23 1 ∣ R 03 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ b ∣ ⊘ = b ∗ ( a + b ) + b R_{03}^{2} = R_{02}^{1} (R_{22}^{1})^{\ast} R_{23}^{1} | R_{03}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} b | \oslash = b^{\ast}(a^{+}b)^{+}b R032=R021(R221)R231R031=(ba+b)(a+bϵ)b=b(a+b)+b
    R 10 2 = R 12 1 ( R 22 1 ) ∗ R 20 1 ∣ R 10 1 = ( a ∗ b ) ( a + b ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{10}^{2} = R_{12}^{1} (R_{22}^{1})^{\ast} R_{20}^{1} | R_{10}^{1} = (a^{\ast}b) (a^{+}b|\epsilon)^{\ast} \oslash | \oslash = \oslash R102=R121(R221)R201R101=(ab)(a+bϵ)=
    R 11 2 = R 12 1 ( R 22 1 ) ∗ R 21 1 ∣ R 11 1 = ( a ∗ b ) ( a + b ∣ ϵ ) ∗ a + ∣ a ∗ = a ∗ ( ( b a + ) + ∣ ϵ ) R_{11}^{2} = R_{12}^{1} (R_{22}^{1})^{\ast} R_{21}^{1} | R_{11}^{1} = (a^{\ast}b) (a^{+}b|\epsilon)^{\ast} a^{+} | a^{\ast} = a^{\ast}((ba^{+})^{+}|\epsilon) R112=R121(R221)R211R111=(ab)(a+bϵ)a+a=a((ba+)+ϵ)
    R 12 2 = R 12 1 ( R 22 1 ) ∗ R 22 1 ∣ R 12 1 = ( a ∗ b ) ( a + b ∣ ϵ ) ∗ ( a + b ∣ ϵ ) ∣ ( a ∗ b ) = a ∗ b ( a + b ) ∗ R_{12}^{2} = R_{12}^{1} (R_{22}^{1})^{\ast} R_{22}^{1} | R_{12}^{1} = (a^{\ast}b) (a^{+}b|\epsilon)^{\ast} (a^{+}b|\epsilon) | (a^{\ast}b) = a^{\ast}b(a^{+}b)^{\ast} R122=R121(R221)R221R121=(ab)(a+bϵ)(a+bϵ)(ab)=ab(a+b)
    R 13 2 = R 12 1 ( R 22 1 ) ∗ R 23 1 ∣ R 13 1 = ( a ∗ b ) ( a + b ∣ ϵ ) ∗ b ∣ ⊘ = a ∗ b ( a + b ) ∗ b R_{13}^{2} = R_{12}^{1} (R_{22}^{1})^{\ast} R_{23}^{1} | R_{13}^{1} = (a^{\ast}b) (a^{+}b|\epsilon)^{\ast} b | \oslash = a^{\ast}b(a^{+}b)^{\ast}b R132=R121(R221)R231R131=(ab)(a+bϵ)b=ab(a+b)b
    R 20 2 = R 22 1 ( R 22 1 ) ∗ R 20 1 ∣ R 20 1 = ( a + b ∣ ϵ ) ( a + b ∣ ϵ ) ∗ ⊘ ∣ ⊘ = ⊘ R_{20}^{2} = R_{22}^{1} (R_{22}^{1})^{\ast} R_{20}^{1} | R_{20}^{1} = (a^{+}b|\epsilon) (a^{+}b|\epsilon)^{\ast} \oslash | \oslash = \oslash R202=R221(R221)R201R201=(a+bϵ)(a+bϵ)=
    R 21 2 = R 22 1 ( R 22 1 ) ∗ R 21 1 ∣ R 21 1 = ( a + b ∣ ϵ ) ( a + b ∣ ϵ ) ∗ a + ∣ a + = ( a + b ) ∗ a + R_{21}^{2} = R_{22}^{1} (R_{22}^{1})^{\ast} R_{21}^{1} | R_{21}^{1} = (a^{+}b|\epsilon) (a^{+}b|\epsilon)^{\ast} a^{+} | a^{+} = (a^{+}b)^{\ast}a^{+} R212=R221(R221)R211R211=(a+bϵ)(a+bϵ)a+a+=(a+b)a+
    R 22 2 = R 22 1 ( R 22 1 ) ∗ R 22 1 ∣ R 22 1 = ( a + b ∣ ϵ ) ( a + b ∣ ϵ ) ∗ ( a + b ∣ ϵ ) ∣ ( a + b ∣ ϵ ) = ( a + b ) ∗ R_{22}^{2} = R_{22}^{1} (R_{22}^{1})^{\ast} R_{22}^{1} | R_{22}^{1} = (a^{+}b|\epsilon) (a^{+}b|\epsilon)^{\ast} (a^{+}b|\epsilon) | (a^{+}b|\epsilon) = (a^{+}b)^{\ast} R222=R221(R221)R221R221=(a+bϵ)(a+bϵ)(a+bϵ)(a+bϵ)=(a+b)
    R 23 2 = R 22 1 ( R 22 1 ) ∗ R 23 1 ∣ R 23 1 = ( a + b ∣ ϵ ) ( a + b ∣ ϵ ) ∗ b ∣ b = ( a + b ) ∗ b R_{23}^{2} = R_{22}^{1} (R_{22}^{1})^{\ast} R_{23}^{1} | R_{23}^{1} = (a^{+}b|\epsilon) (a^{+}b|\epsilon)^{\ast} b | b = (a^{+}b)^{\ast}b R232=R221(R221)R231R231=(a+bϵ)(a+bϵ)bb=(a+b)b
    R 30 2 = R 32 1 ( R 22 1 ) ∗ R 20 1 ∣ R 30 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ ⊘ ∣ b ∗ = b ∗ R_{30}^{2} = R_{32}^{1} (R_{22}^{1})^{\ast} R_{20}^{1} | R_{30}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} \oslash | b^{\ast} = b^{\ast} R302=R321(R221)R201R301=(ba+b)(a+bϵ)b=b
    R 31 2 = R 32 1 ( R 22 1 ) ∗ R 21 1 ∣ R 31 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ a + ∣ ( b ∗ a + ) = b ∗ ( a + b ) ∗ a + R_{31}^{2} = R_{32}^{1} (R_{22}^{1})^{\ast} R_{21}^{1} | R_{31}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} a^{+} | (b^{\ast}a^{+}) = b^{\ast}(a^{+}b)^{\ast}a^{+} R312=R321(R221)R211R311=(ba+b)(a+bϵ)a+(ba+)=b(a+b)a+
    R 32 2 = R 32 1 ( R 22 1 ) ∗ R 22 1 ∣ R 32 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ ( a + b ∣ ϵ ) ∣ ( b ∗ a + b ) = b ∗ ( a + b ) + R_{32}^{2} = R_{32}^{1} (R_{22}^{1})^{\ast} R_{22}^{1} | R_{32}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} (a^{+}b|\epsilon) | (b^{\ast}a^{+}b) = b^{\ast}(a^{+}b)^{+} R322=R321(R221)R221R321=(ba+b)(a+bϵ)(a+bϵ)(ba+b)=b(a+b)+
    R 33 2 = R 32 1 ( R 22 1 ) ∗ R 23 1 ∣ R 33 1 = ( b ∗ a + b ) ( a + b ∣ ϵ ) ∗ b ∣ ϵ = b ∗ ( a + b ) + ∣ ϵ R_{33}^{2} = R_{32}^{1} (R_{22}^{1})^{\ast} R_{23}^{1} | R_{33}^{1} = (b^{\ast}a^{+}b) (a^{+}b|\epsilon)^{\ast} b | \epsilon = b^{\ast}(a^{+}b)^{+}|\epsilon R332=R321(R221)R231R331=(ba+b)(a+bϵ)bϵ=b(a+b)+ϵ

  • k = 3 k = 3 k=3

    R 00 3 = R 03 2 ( R 33 2 ) ∗ R 30 2 ∣ R 00 2 = ( b ∗ ( a + b ) + b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ∣ b ∗ R_{00}^{3} = R_{03}^{2} (R_{33}^{2})^{\ast} R_{30}^{2} | R_{00}^{2} = (b^{\ast}(a^{+}b)^{+}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast} | b^{\ast} R003=R032(R332)R302R002=(b(a+b)+b)(b(a+b)+ϵ)bb
    R 01 3 = R 03 2 ( R 33 2 ) ∗ R 31 2 ∣ R 01 2 = ( b ∗ ( a + b ) + b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) ∗ a + ∣ b ∗ a + ( ( b a + ) + ∣ ϵ ) R_{01}^{3} = R_{03}^{2} (R_{33}^{2})^{\ast} R_{31}^{2} | R_{01}^{2} = (b^{\ast}(a^{+}b)^{+}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{\ast}a^{+} | b^{\ast}a^{+}((ba^{+})^{+}|\epsilon) R013=R032(R332)R312R012=(b(a+b)+b)(b(a+b)+ϵ)b(a+b)a+ba+((ba+)+ϵ)
    R 02 3 = R 03 2 ( R 33 2 ) ∗ R 32 2 ∣ R 02 2 = ( b ∗ ( a + b ) + b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) + ∣ b ∗ ( a + b ) + R_{02}^{3} = R_{03}^{2} (R_{33}^{2})^{\ast} R_{32}^{2} | R_{02}^{2} = (b^{\ast}(a^{+}b)^{+}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{+} | b^{\ast}(a^{+}b)^{+} R023=R032(R332)R322R022=(b(a+b)+b)(b(a+b)+ϵ)b(a+b)+b(a+b)+
    R 03 3 = R 03 2 ( R 33 2 ) ∗ R 33 2 ∣ R 03 2 = ( b ∗ ( a + b ) + b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ ( b ∗ ( a + b ) + ∣ ϵ ) ∣ b ∗ ( a + b ) + b R_{03}^{3} = R_{03}^{2} (R_{33}^{2})^{\ast} R_{33}^{2} | R_{03}^{2} = (b^{\ast}(a^{+}b)^{+}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} (b^{\ast}(a^{+}b)^{+}|\epsilon) | b^{\ast}(a^{+}b)^{+}b R033=R032(R332)R332R032=(b(a+b)+b)(b(a+b)+ϵ)(b(a+b)+ϵ)b(a+b)+b
    R 10 3 = R 13 2 ( R 33 2 ) ∗ R 30 2 ∣ R 10 2 = ( a ∗ b ( a + b ) ∗ b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ∣ ⊘ R_{10}^{3} = R_{13}^{2} (R_{33}^{2})^{\ast} R_{30}^{2} | R_{10}^{2} = (a^{\ast}b(a^{+}b)^{\ast}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast} | \oslash R103=R132(R332)R302R102=(ab(a+b)b)(b(a+b)+ϵ)b
    R 11 3 = R 13 2 ( R 33 2 ) ∗ R 31 2 ∣ R 11 2 = ( a ∗ b ( a + b ) ∗ b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) ∗ a + ∣ a ∗ ( ( b a + ) + ∣ ϵ ) R_{11}^{3} = R_{13}^{2} (R_{33}^{2})^{\ast} R_{31}^{2} | R_{11}^{2} = (a^{\ast}b(a^{+}b)^{\ast}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{\ast}a^{+} | a^{\ast}((ba^{+})^{+}|\epsilon) R113=R132(R332)R312R112=(ab(a+b)b)(b(a+b)+ϵ)b(a+b)a+a((ba+)+ϵ)
    R 12 3 = R 13 2 ( R 33 2 ) ∗ R 32 2 ∣ R 12 2 = ( a ∗ b ( a + b ) ∗ b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) + ∣ a ∗ b ( a + b ) ∗ R_{12}^{3} = R_{13}^{2} (R_{33}^{2})^{\ast} R_{32}^{2} | R_{12}^{2} = (a^{\ast}b(a^{+}b)^{\ast}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{+} | a^{\ast}b(a^{+}b)^{\ast} R123=R132(R332)R322R122=(ab(a+b)b)(b(a+b)+ϵ)b(a+b)+ab(a+b)
    R 13 3 = R 13 2 ( R 33 2 ) ∗ R 33 2 ∣ R 13 2 = ( a ∗ b ( a + b ) ∗ b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ ( b ∗ ( a + b ) + ∣ ϵ ) ∣ a ∗ b ( a + b ) ∗ b R_{13}^{3} = R_{13}^{2} (R_{33}^{2})^{\ast} R_{33}^{2} | R_{13}^{2} = (a^{\ast}b(a^{+}b)^{\ast}b) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} (b^{\ast}(a^{+}b)^{+}|\epsilon) | a^{\ast}b(a^{+}b)^{\ast}b R133=R132(R332)R332R132=(ab(a+b)b)(b(a+b)+ϵ)(b(a+b)+ϵ)ab(a+b)b
    R 20 3 = R 23 2 ( R 33 2 ) ∗ R 30 2 ∣ R 20 2 = ( a + b ) ∗ b ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ∣ ⊘ R_{20}^{3} = R_{23}^{2} (R_{33}^{2})^{\ast} R_{30}^{2} | R_{20}^{2} = (a^{+}b)^{\ast}b (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast} | \oslash R203=R232(R332)R302R202=(a+b)b(b(a+b)+ϵ)b
    R 21 3 = R 23 2 ( R 33 2 ) ∗ R 31 2 ∣ R 21 2 = ( a + b ) ∗ b ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) ∗ a + ∣ ( a + b ) ∗ a + R_{21}^{3} = R_{23}^{2} (R_{33}^{2})^{\ast} R_{31}^{2} | R_{21}^{2} = (a^{+}b)^{\ast}b (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{\ast}a^{+} | (a^{+}b)^{\ast}a^{+} R213=R232(R332)R312R212=(a+b)b(b(a+b)+ϵ)b(a+b)a+(a+b)a+
    R 22 3 = R 23 2 ( R 33 2 ) ∗ R 32 2 ∣ R 22 2 = ( a + b ) ∗ b ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) + ∣ ( a + b ) ∗ R_{22}^{3} = R_{23}^{2} (R_{33}^{2})^{\ast} R_{32}^{2} | R_{22}^{2} = (a^{+}b)^{\ast}b (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{+} | (a^{+}b)^{\ast} R223=R232(R332)R322R222=(a+b)b(b(a+b)+ϵ)b(a+b)+(a+b)
    R 23 3 = R 23 2 ( R 33 2 ) ∗ R 33 2 ∣ R 23 2 = ( a + b ) ∗ b ( b ∗ ( a + b ) + ∣ ϵ ) ∗ ( b ∗ ( a + b ) + ∣ ϵ ) ∣ ( a + b ) ∗ b R_{23}^{3} = R_{23}^{2} (R_{33}^{2})^{\ast} R_{33}^{2} | R_{23}^{2} = (a^{+}b)^{\ast}b (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} (b^{\ast}(a^{+}b)^{+}|\epsilon) | (a^{+}b)^{\ast}b R233=R232(R332)R332R232=(a+b)b(b(a+b)+ϵ)(b(a+b)+ϵ)(a+b)b
    R 30 3 = R 33 2 ( R 33 2 ) ∗ R 30 2 ∣ R 30 2 = ( b ∗ ( a + b ) + ∣ ϵ ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ∣ b ∗ R_{30}^{3} = R_{33}^{2} (R_{33}^{2})^{\ast} R_{30}^{2} | R_{30}^{2} = (b^{\ast}(a^{+}b)^{+}|\epsilon) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast} | b^{\ast} R303=R332(R332)R302R302=(b(a+b)+ϵ)(b(a+b)+ϵ)bb
    R 31 3 = R 33 2 ( R 33 2 ) ∗ R 31 2 ∣ R 31 2 = ( b ∗ ( a + b ) + ∣ ϵ ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) ∗ a + ∣ b ∗ ( a + b ) ∗ a + R_{31}^{3} = R_{33}^{2} (R_{33}^{2})^{\ast} R_{31}^{2} | R_{31}^{2} = (b^{\ast}(a^{+}b)^{+}|\epsilon) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{\ast}a^{+} | b^{\ast}(a^{+}b)^{\ast}a^{+} R313=R332(R332)R312R312=(b(a+b)+ϵ)(b(a+b)+ϵ)b(a+b)a+b(a+b)a+
    R 32 3 = R 33 2 ( R 33 2 ) ∗ R 32 2 ∣ R 32 2 = ( b ∗ ( a + b ) + ∣ ϵ ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ b ∗ ( a + b ) + ∣ b ∗ ( a + b ) + R_{32}^{3} = R_{33}^{2} (R_{33}^{2})^{\ast} R_{32}^{2} | R_{32}^{2} = (b^{\ast}(a^{+}b)^{+}|\epsilon) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} b^{\ast}(a^{+}b)^{+} | b^{\ast}(a^{+}b)^{+} R323=R332(R332)R322R322=(b(a+b)+ϵ)(b(a+b)+ϵ)b(a+b)+b(a+b)+
    R 33 3 = R 33 2 ( R 33 2 ) ∗ R 33 2 ∣ R 33 2 = ( b ∗ ( a + b ) + ∣ ϵ ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ ( b ∗ ( a + b ) + ∣ ϵ ) ∣ b ∗ ( a + b ) + ∣ ϵ R_{33}^{3} = R_{33}^{2} (R_{33}^{2})^{\ast} R_{33}^{2} | R_{33}^{2} = (b^{\ast}(a^{+}b)^{+}|\epsilon) (b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast} (b^{\ast}(a^{+}b)^{+}|\epsilon) | b^{\ast}(a^{+}b)^{+}|\epsilon R333=R332(R332)R332R332=(b(a+b)+ϵ)(b(a+b)+ϵ)(b(a+b)+ϵ)b(a+b)+ϵ

最后的 k = 3 k = 3 k=3 就不展开了,我们只需要简化 R 03 3 R_{03}^{3} R033 就可以了:
R 03 3 = ( b ∗ ( a + b ) + b ) ( b ∗ ( a + b ) + ∣ ϵ ) ∗ ( b ∗ ( a + b ) + ∣ ϵ ) ∣ b ∗ ( a + b ) + b R_{03}^{3} = (b^{\ast}(a^{+}b)^{+}b)(b^{\ast}(a^{+}b)^{+}|\epsilon)^{\ast}(b^{\ast}(a^{+}b)^{+}|\epsilon)|b^{\ast}(a^{+}b)^{+}b R033=(b(a+b)+b)(b(a+b)+ϵ)(b(a+b)+ϵ)b(a+b)+b
= b ∗ ( a + b ) + b ( b ∗ ( a + b ) + ) ∗ = b^{\ast}(a^{+}b)^{+}b(b^{\ast}(a^{+}b)^{+})^{\ast} =b(a+b)+b(b(a+b)+)
= b ∗ a ∗ a b ( a ∗ a b ) ∗ b ( b ∗ a ∗ a b ( a ∗ a b ) ∗ ) ∗ = b^{\ast}a^{\ast}ab(a^{\ast}ab)^{\ast}b(b^{\ast}a^{\ast}ab(a^{\ast}ab)^{\ast})^{\ast} =baab(aab)b(baab(aab))
= b ∗ ( a ∗ a b ) ∗ a ∗ a b b ( b ∗ ( a ∗ a b ) ∗ a ∗ a b ) ∗ = b^{\ast}(a^{\ast}ab)^{\ast}a^{\ast}abb(b^{\ast}(a^{\ast}ab)^{\ast}a^{\ast}ab)^{\ast} =b(aab)aabb(b(aab)aab)
= ( a ∣ b ) ∗ a b b = (a|b)^{*}abb =(ab)abb

有点偷吃步hhh,不过反正结果上是一样的,这样的 Kleene 闭包也是可以自动化的所以不需要过于纠结必须用手算hh。

最终版本的 DFA

到此就全部完成啦,我们经由 RE -> NFA -> DFA -> 最小化 DFA -> 验证 DFA 这几个步骤,终于构建出了最终版本的 DFA 了,撒花~

示例1: a ( b ∣ c ) ∗ a(b|c)^{*} a(bc)

示例2: ( a ∣ b ) ∗ a b b (a|b)^{*}abb (ab)abb

结语

从 RE 构建 DFA 的三部曲就到这边结束啦,由于最后的验证 DFA使用 Kleene 闭包其实比较繁琐,读者可以尝试自己实现自动化这个过程的程序(作者估计是写不出来了hhh)。

  • 10
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是学习计算机科学的一门基础课程,主要涉及语言的识别和转化,而正则表达式则是其中一个非常重要的工具。在编译原理中,正则表达式通常用于描述一些模式,比如关键字、标识符等。因此,掌握正则表达式的转换过程对于理解编译原理课程非常重要。 正则表达式的转换过程主要包括以下几个部分:正则表达式转NFA、NFA转DFADFA小化。其中,NFA(非确定有限状态自动机)和DFA(确定有限状态自动机)都是描述正则表达式的模型。 正则表达式转NFA: 首先,正则表达式中的基本元素是字符、括号和运算符。在转换为NFA的过程中,需要设计出一些状态来描述不同的字符和运算符。 对于字符来说,我们可以为它们设计出一个状态,状态的入口边是字符,出口边为空。 对于括号和运算符来说,可以为它们设计出一些连接状态。例如在括号中的字符可以通过连接状态直接连接到后面的状态,或者通过其他运算符先连接到其他的状态再连接到后面的状态。 最后,需要定义一个起始状态和一个终止状态,起始状态与第一个字符状态相连,最后一个字符状态与终止状态相连。这样,我们就得到了一张NFA图。 NFA转DFA: 将一个NFA图转换成DFA图的主要目的是为了简化图结构,以便后续对文本进行识别。 首先,需要定义DFA的状态集合,每个集合都对应一个状态。因为DFA是完全确定的有限状态自动机,所以在DFA中只能有一个状态。 然后,需要将NFA图中的每个状态都映射为DFA图中的一个状态,以便对文本进行识别。当NFA图中有多个状态对应于DFA图中的同一状态时,需要将它们合并,并将它们的出口边合并成一个出口边。 DFA小化: 最后,对DFA进行最小化处理,以便减少状态数,提高运行效率。在最小化处理时需要考虑不同状态之间的等价关系。 可以采用遍历算法,将DFA中的状态按照等价关系划分为若干个等价类,然后构造一个等价类访问表,每个表项对应一个状态集。 最小化后的DFA图是可以识别文本的,可以用于在编译器中进行文本匹配和词法分析等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值