Page 8 - 《软件学报》2021年第12期
P. 8

3672                                Journal of Software  软件学报 Vol.32, No.12, December 2021

         坐标差值;而 dCGG 要求产生式图 G         | L R  和图柄 Q 具有等价的空间拓扑结构,即 G       | L R  中任意一个结点和它在图柄
         Q 中对应的结点具有完全相等的离散坐标值.
             在图文法的推导或归约工作流中,在根据一个产生式图找到其在主图中的图柄后,便可以对图柄执行图转
         换操作.根据不同的配置粒度,cCGG 和 dCGG 中图转换操作的具体步骤如下.
             1)   根据当前产生式生成一个产生式实例;
             2)   平移产生式实例的右图或左图 G           | R L .
                 ¾   cCGG:将图柄中的任意结点 n 与其在产生式图 G             | L R  中的对应节点 n′的坐标差值,即 n.c−n′.c,作为
                     偏移量平移产生式的另一端 G           | R L ;

                 ¾   dCGG:首先,在产生式图 G      | L R  中选择一个具有最大“Y”值的结点 n′,若存在多个(大于 1)这样的结
                     点,则从中选择具有最小“X”值的结点;其次,将图柄中的对应结点 n 与 n′的坐标差值 n.c−n′.c 作
                     为偏移量平移另一个产生式图 G            | R L ;
             3)   从主图中删除图柄;
             4)   将产生式图 G     嵌入到主图中.
                             | R L
             图 2 是一个 CGG 中 R-application 的例子,其中,图 2(a)是一个给定主图,图 2(b)和图 2(c)分别是一个 cCGG
         产生式和 dCGG 产生式.对于 cCGG 产生式,产生式实例的左图使用偏移量(0,1.5)进行平移,该偏移量是图 2(a)
         中虚线框内所示图柄与产生式右图之间匹配结点的坐标差值.而对于 dCGG 产生式,首先在产生式右图中选择
         具有最大“Y”坐标值的结点“stat 1 ”,然后将图柄中的对应结点与结点“stat 1 ”的坐标差值(−1,0)作为偏移量,平移产
         生式左图.在该例中,使用 cCGG 产生式和 dCGG 产生式对图柄进行 R-application 操作,得到的是两个不同的主
         图,如图 2(d)、图 2(e)所示.











                              (a)  一个主图                       (b)  一个 cCGG 产生式
















                              (c)  一个 dCGG 产生式         (d) cCGG 下新主图      (e) dCGG 下新主图
                                       Fig.2    An example of CGG R-application
                                        图 2   CGG 中 R-application 实例
   3   4   5   6   7   8   9   10   11   12   13