Page 82 - 《软件学报》2021年第6期
P. 82

1656                                     Journal of Software  软件学报 Vol.32, No.6,  June 2021

         Inserter 位置,对应到代码片段 2 的第 3 行、第 4 行、第 16 行、第 17 行和第 28 行.D 和 E 组件同理.接下来,第
         4 层的 F 和 G 组件分别插入到带有{{0,0B}}和{{0,1B}}分支标记的 Inserter 位置,对应到代码片段 2 的第 5 行
         和第 20 行.第 5 层的 H,I,J,K 组件的处理方式同 C 组件.第 6 层的 L 和 M 组件可以直接根据它们的分支标记确
         定插入位置.第 7 层的 N 组件和 M 组件类似,只不过在处理{0,0B}分支的时候,要把{0,0B,0F}和{0,0B,1F}对应的
         Inserter 删除,对应到代码片段 2 的第 10 行、第 14 行.第 8 层的 O 组件的处理方式同 M.最后,把 CGLT 中的所
         有 Inserter 删除.根据代码片段 2 中的代码生成位置表,可以直接翻译为各种主流的编程语言,将 ActorExe 元素
         转化为组件对应的执行语句,Branch 元素转化为 if,else if,switch 等流程控制语句即可.
             代码片段 2.  由图 2 中模型生成的代码生成位置表.
             1:   ActorExe:A(⋅)            //迭代第 1 层 A 组件时创建
             2:   ActorExe:B(A)            //迭代第 2 层 B 组件时创建
             3:   Branch({{0,0B}})         //迭代第 3 层 C 组件时创建
             4:      ActorExe:C(B)         //迭代第 3 层 C 组件时创建
             5:      ActorExe:F(C)         //迭代第 4 层 F 组件时创建
             6:      Branch({{0,0B,0F}})   //迭代第 5 层 H 组件时创建
             7:         ActorExe:H(F)      //迭代第 5 层 H 组件时创建
             8:         ActorExe:L(H)      //迭代第 6 层 L 组件时创建
             9:         ActorExe:M(H)      //迭代第 6 层 M 组件时创建
             10:       Inserter({{0,0B,0F}})    //迭代第 5 层 H 组件时创建,迭代第 7 层 N 组件时删除
             11:    Branch({{0,0B,1F}})    //迭代第 5 层 H 组件时创建
             12:       ActorExe:I(F)       //迭代第 5 层 I 组件时创建
             13:       ActorExe:M(I)       //迭代第 6 层 M 组件时创建
             14:       Inserter({{0,0B,1F}})    //迭代第 5 层 H 组件时创建,迭代第 7 层 N 组件时删除
             15:    ActorExe:N(M)          //迭代第 7 层 N 组件时创建
             16:    Inserter({{0,0B}})     //迭代第 3 层 C 组件时创建,迭代第 8 层 O 组件时删除
             17: Branch ({{0,1B}})         //迭代第 3 层 C 组件时创建
             18:    ActorExe:D(B)          //迭代第 3 层 D 组件时创建
             19:    ActorExe:E(B)          //迭代第 3 层 E 组件时创建
             20:    ActorExe:G(D)          //迭代第 4 层 G 组件时创建
             21:    Branch({{0,1B,0G}})    //迭代第 5 层 J 组件时创建
             22:       ActorExe:J(G)       //迭代第 5 层 J 组件时创建
             23:       ActorExe:N(J)       //迭代第 7 层 N 组件时创建
             24:       Inserter({{0,1B,0G}})    //迭代第 5 层 J 组件时创建,迭代第 8 层 O 组件时删除
             25:    Branch ({{0,1B,1G}})   //迭代第 5 层 J 组件时创建
             26:       ActorExe:K(G)       //迭代第 5 层 K 组件时创建
             27:       ActorExe:N(K)       //迭代第 7 层 N 组件时创建
             28:       Inserter({{0,1B,1G}})    //迭代第 5 层 J 组件时创建,迭代第 8 层 O 组件时删除
             29:     Inserter({{0,1B}})    //迭代第 3 层 C 组件时创建,迭代第 8 层 O 组件时删除
             30: ActorExe:O(N)             //迭代第 8 层 O 组件时创建
             31: Inserter({{0}})           //算法开始时创建,算法结束时删除
         5    案例实验及对比

             由于 Ptolemy-II 构建的带有复杂分支的数据流模型看起来更直观些,我们使用 Ptolemy-II 构建 3 种不同分
   77   78   79   80   81   82   83   84   85   86   87