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

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


                 句有  3  种情况: 无返回值   (S-2), 返回一个值  (S-3), 返回值列表  (S-4). return  语句的操作语义如下:

                                                 p,g,l, f ⊢ return;,µ ⇒ Return,µ ′                  (S-2)

                                                       p,g,l ⊢ e,µ ⇒ v
                                                                                                    (S-3)
                                                p,g,l, f ⊢ return e,µ ⇒ Return v,µ ′

                                                      p,g,l ⊢ e ,µ ⇒ vs
                                                             ∗
                                                                                                    (S-4)
                                               p,g,l, f ⊢ return e ,µ ⇒ Return vs,µ ′
                                                            ∗
                                             e 的真值选择执行哪一部分的语句, 因此执行前后状态发生变化, if 语句的操
                    条件语句根据条件判断表达式
                 作语义如下:

                                      p,g,l ⊢ e,µ ⇒ v is_true(v,τ v )  p,g,l, f ⊢ stmt 1 ,µ ⇒ out,µ ′
                                                                                                    (S-5)
                                             p,g,l, f ⊢ if (e) stmt 1 (else stmt 2 ),µ ⇒ out,µ ′

                                      p,g,l ⊢ e,µ ⇒ v is_ false(v,τ v )  p,g,l, f ⊢ stmt 2 ,µ ⇒ out,µ ′
                                                                                                    (S-6)
                                             p,g,l, f ⊢ if (e) stmt 1 (else stmt 2 ),µ ⇒ out,µ ′
                                                                                           e
                    首先对条件判断表达式进行求值, 其中             is_true(v,τ) 与  is_false(v,τ) 函数用于描述判定条件   的求值结果. 当
                 求值结果为     true  时, 执行第  1  个分支的语句   stmt 1 , 得到语句   stmt 1  的执行结果  out, 条件语句的执行结果与语句
                 stmt 1  的结果一致, 参考规则   (S-5). 当判定条件求值结果为      false 时, 条件语句的执行结果与语句        stmt 2  的结果一致,
                 参考规则   (S-6).
                    顺序执行语句的操作语义如下:

                                      p,g,l, f ⊢ stmt 1 ,µ ⇒ Normal,µ 1  p,g,l, f ⊢ stmt 2 ,µ 1 ⇒ out,µ 2
                                                                                                    (S-7)
                                                p,g,l, f ⊢ stmt 1 ; stmt 2 ,µ ⇒ out,µ 2

                                                p,g,l, f ⊢ stmt 1 ,µ ⇒ Fail|Return,µ ′
                                                                                                    (S-8)
                                             p,g,l, f ⊢ stmt 1 ; stmt 2 ,µ ⇒ Fail|Return,µ ′
                    当第  1  个语句   stmt 1  正常执行结束时, 顺序执行语句的执行结果与          stmt 2  的执行结果一致, 参考规则     (S-7). 当
                     stmt 1  执行失败或者包含  return 语句时,                                  stmt 1  一致, 参考规则  (S-8).
                 语句                               stmt 2  不再执行, 顺序执行语句的执行结果与
                    循环语句有两类, 其语法定义如下:
                    (1) While(e) stmt
                    (2) for(stmt 1 ;e;stmt 2 ) stmt
                    for 循环语句的操作语义:

                                 p,g,l, f ⊢ stmt 1 ,µ ⇒ Normal,µ 1  p,g,l, f ⊢ for(;e; stmt 2 ) stmt,µ 1 ⇒ out,µ 2
                                                                                                    (S-9)
                                            p,g,l, f ⊢ for(stmt 1 ;e; stmt 2 ) stmt,µ ⇒ out,µ 2

                                                 p,g,l ⊢ e,µ ⇒ v  is_false(v,τ v )
                                                                                                    (S-10)
                                              p,g,l, f ⊢ for(;e; stmt 2 ) stmt,µ ⇒ out,u

                                     p,g,l ⊢ e,µ ⇒ v  is_true(v,τ v )  p,g,l, f ⊢ stmt,µ ⇒ Normal,µ 1
                                                                                                    (S-11)
                                       p,g,l ⊢ stmt 2 ,µ 1 ⇒ out,u 2  for(;e; stmt 2 ) stmt,µ 2 ⇒ out,µ 3
                                              p,g,l, f ⊢ for(;e; stmt 2 ) stmt,µ ⇒ out,µ 3

                               p,g,l ⊢ e,µ ⇒ v  is_true(v,τ v )  p,g,l, f ⊢ stmt,µ ⇒ out,µ 1  out = Return|Fail
                                                                                                    (S-12)
                                              p,g,l, f ⊢ for(;e; stmt 2 ) stmt,µ ⇒ out,µ 1
                                                                                stmt 1 ; for(;e; stmt 2 ) stmt, 参考规
                    for 循环语句首先执行初始化语句          stmt 1 , 再执行循环内容, 因此可将其拆分为
                 则  (S-9), 根据终止条件给出    3  个循环规则. 循环判断条件      e 1  求值为  false 时, 循环结束, 参考规则  (S-10). 循环条件
                 e 1  值为  true 时, 先执行循环体内语句   stmt, 正常执行完毕后, 再执行  , 得到新的状态, 从新的状态出发, 继续进入
                                                                     e 2
                 循环, 参考规则    (S-11). 若循环体内语句执行结果为        Return 或  Fail, 表明函数在此处返回或者出现异常, 循环立刻
                 结束, 参考规则    (S-12).
                    while 循环函数的操作语义:

                                                 p,g,l ⊢ e,µ ⇒ v is_ false(v,τ v )
                                                                                                    (S-13)
                                                p,g,l, f ⊢ while(e) stmt,µ ⇒ out,µ
   102   103   104   105   106   107   108   109   110   111   112