上下文在K中到底做什么?

时间:2020-03-03 05:35:26

标签: kframework

K tutorial中简要提到了上下文的使用,这是自定义订单评估的一种方法。但是,我还看到其他上下文语句中包含重写箭头,例如无类型简单语言中的this one

context ++(HOLE => lvalue(HOLE))
rule <k> ++loc(L) => I +Int 1 ...</k>
     <store>... L |-> (I => I +Int 1) ...</store>  [increment]

有人可以解释上下文在K中到底如何工作吗?我特别感兴趣:

  • K中context的使用是否比说明顺序更普遍?
  • context语句的声明顺序如何影响语义?

谢谢!

1 个答案:

答案 0 :(得分:0)

有关K中上下文声明的更多详细信息,请参见K的文档here。特别地,带有重写箭头的上下文表示加热和冷却将用特定符号包裹要加热或冷却的术语。在您的示例中,该符号为lvalue

要专门回答您的问题:

  • 上下文声明(如严格性属性)主要用于指定评估策略。尽管从理论上讲它们可以用于其他用途,但实际上这种情况很少发生。也就是说,评估策略可能很复杂,这就是为什么K具有许多与评估策略相关的不同特征的原因。在您提到的示例中,我们在上下文声明中使用了重写,以便提供一组单独的规则来评估左值(即,避免一路真正地评估一个值,而只评估一个位置)。
  • K的句子是无序的。在单个模块内,您可以重新排列其所有句子的顺序(导入语句除外,该语句必须首先出现),并且不会影响预期的语义(尽管如果语义不确定,后端可能会导致具体执行的行为略有不同) )。这包括上下文声明。