Page 99 - 《软件学报》2025年第9期
P. 99

4010                                                       软件学报  2025  年第  36  卷第  9  期



                                                  表 2 右值表达式求值规则

                   序号                                        求值规则
                    R1                                     (c,σ i−1 , s i ,i) ⇓ c
                                                                   l
                                                                     l
                                                          (la,σ i−1 , s i ,i) ⇒ s (x)
                    R2                                               i
                                                                     r
                                                          (la,σ i−1 , s i ,i) ⇓ s (x)
                                                                     i
                                                                   l
                                                         (la,σ i−1 , s i ,i) ⇒ (bl,δ)
                    R3
                                                        (&la,σ i−1 , s i ,i) ⇓ ptr(bl,δ)
                                                      (ra,σ i−1 , s i ,i) ⇓ v 1
                    R4                                             其中,v = (τ)v 1
                                                     ((τ)ra,σ i−1 , s i ,i) ⇓ v
                                                                  l
                    R5                     (ra,σ i−1 , s i ,i) ⇓ v  (id,σ i−1 , s i ,i) ⇒ (bl,δ) )其中,τ为id[ra]的类型
                                                           (
                                           (id[ra],σ i−1 , s i ,i) ⇓ ptr bl,δ+v·sizeof(τ)
                                                               l
                    R6      (ra 1 ,σ i−1 , s i ,i) ⇓ v 1 (ra 2 ,σ i−1 , s i ,i) ⇓ v 2 (id,σ i−1 , s i ,i) ⇒ (bl,δ) 其中,n表示数组id的列数,τ为id[ra 1 ][ra 2 ]的类型
                             (id[ra 1 ][ra 2 ],σ i−1 , s i ,i) ⇓ ptr(bl,δ+(v 1 ·n+v 2 )· sizeof (τ))
                                                 type(la) = struct id{φ}  field_offset(v φ ,φ) = δ ′
                    R7
                                                      (la.v φ ,σ i−1 , s i ,i) ⇓ ptr(bl,δ+δ )
                                                                          ′
                                                     (ra 1 ,σ i−1 , s i ,i) ⇓ v 1
                    R8                                             其中,v = mop 1 v 1
                                                   (mop 1 ra 1 ,σ i−1 , s i ,i) ⇓ v
                                             (ra 1 ,σ i−1 , s i ,i) ⇓ v 1  (ra 2 ,σ i−1 , s i ,i) ⇓ v 2
                    R9                                                  其中,v = v 1 mop 2 v 2
                                                 (ra 1 mop 2 ra 2 ,σ i−1 , s i ,i) ⇓ v
                                                   (b,σ i−1 , s i ,i) ⇓ true  (ra 1 ,σ i−1 , s i ,i) ⇓ v 1
                    R10
                                                    (if (b)then ra 1 else ra 2 ,σ i−1 , s i ,i) ⇓ v 1
                                                   (b,σ i−1 , s i ,i) ⇓ false (ra 2 ,σ i−1 , s i ,i) ⇓ v 2
                    R11
                                                    (if (b)then ra 1 else ra 2 ,σ i−1 , s i ,i) ⇓ v 2
                                                    (ra,σ i−m−1 , s i−m ,i−m) ⇓ v
                    R12                                               其中,m ⩽ i
                                                        m
                                                      (⊝ ra,σ i−1 , s i ,i) ⇓ v
                                            (ra 1 ,σ i−1 , s i ,i) ⇓ v 1 ,...,(ra k ,σ i−1 , s i ,i) ⇓ v k
                    R13                                                 其中,vs = (v 1 ,...,v k )
                                                ((ra 1 ,...,ra k ),σ i−1 , s i ,i) ⇓ vs

                    表  3  为  MSVL  布尔表达式求值规则.

                                                  表 3 布尔表达式求值规则

                         序号                                        求值规则
                          B1                                   (true,σ i−1 , s i ,i) ⇓ true
                          B2                                   (false,σ i−1 , s i ,i) ⇓ false
                                                                            {
                                             (ra 1 ,σ i−1 , s i ,i) ⇓ v 1  (ra 2 ,σ i−1 , s i ,i) ⇓ v 2  true 如果v 1 mrop v 2 成立
                          B3                                             ,v =
                                                  (ra 1 mrop ra 2 ,σ i−1 , s i ,i) ⇓ v  false 否则
                                                        (b,σ i−1 , s i ,i) ⇓ true  (b,σ i−1 , s i ,i) ⇓ false
                          B4
                                                        (¬b,σ i−1 , s i ,i) ⇓ false  (¬b,σ i−1 , s i ,i) ⇓ true
                                                                          {
                                             (b 1 ,σ i−1 , s i ,i) ⇓ v 1  (b 2 ,σ i−1 , s i ,i) ⇓ v 2  true 如果v 1 = true且v 2 = true
                          B5                                           ,v =
                                                  (b 1 ∧b 2 ,σ i−1 , s i ,i) ⇓ v  false 否则
                                                                          {
                                             (b 1 ,σ i−1 , s i ,i) ⇓ v 1  (b 2 ,σ i−1 , s i ,i) ⇓ v 2  true 如果v 1 = true或v 2 = true
                          B6                                           ,v =
                                                  (b 1 ∨b 2 ,σ i−1 , s i ,i) ⇓ v  false 否则

                    表  4  为  MSVL  语句的等价规则, 其中   ms 为  MSVL  语句. SKIP  处理  skip 语句. UASS  处理下一状态赋值语句.
                 AND  处理合取语句. NEXT    处理下一状态语句,       〇ms 表示下一状态执行       ms, more 表示当前区间未结束与       ¬empty
                 等价.  alw ms) 可以表示为   □ms. CHOP  处理顺序语句并对其进行简化. IF         将条件语句转化成等价程序. WHL          将
                        (


                 循环语句转化成等价的条件语句. PAR            处理了并行语句. 表      5  为  MSVL  真值的语义等价规则, 其中      P m  为  MSVL
                 语句.
   94   95   96   97   98   99   100   101   102   103   104