首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构操作语义在K?

结构操作语义在K?
EN

Stack Overflow用户
提问于 2020-04-30 18:29:36
回答 1查看 57关注 0票数 1

是否有规则的语法,如:

代码语言:javascript
复制
P => P'
-----------
P + Q => P'

或者我需要用计算上下文重新定义语义吗?

Kframework网站上有一本关于2010年以来的大步骤SOS的书,使用的是旧的语法:

代码语言:javascript
复制
crl < A1 / A2,Sigma > => < I1 /Int I2 >
if < A1,Sigma > => < I1 > /\ < A2,Sigma > => < I2 > /\ I2 =/= 0 .

它似乎做了我想要的,但我不确定是否存在新的语法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 19:51:55

您可以这样做(psuedocode):

代码语言:javascript
复制
configuration <k> $PGM </k>
              <state> WHATEVER_YOUR_STATE_IS </state>

syntax KItem ::= evaluateInContext ( Exp , StateCell )
syntax Exp ::= Exp "/" Exp | "HOLE1" | "HOLE2" | Value
syntax Value ::= Int

rule <k> A1 / A2 => evaluateInContext(A1, <state> STATE </state>) ~> evaluateInContext(A2, <state> STATE </state>) ~> HOLE1 / HOLE2 ... </k>
     <state> STATE </state>

rule <k> evaluateInContext(A, <state> STATE </state>) => A ... </k>
     <state> _ => STATE </state>

rule <k> V:Value ~> evaluateInContext(A, S) => evaluateInContext(A, S) ~> V ... </k>

rule <k> V:Value ~> V':Value ~> HOLE1 / HOLE2 => V' /Int V ... </k>

所以你总是可以作为一流的公民来传递配置。

这方面的一个例子是在KEVM中,在这里我们使用这种机制来保存/检索一个调用堆栈列表。

更新以解决评论。

如果要检查子项是否进行状态转换,则可以将其更改为以下内容(再次使用psuedo代码):

代码语言:javascript
复制
syntax KItem ::= "evaluated?" "(" Exp "," State ")" 
rule <k> evaluateInContext(A, <state> STATE </state>) => A ~> evaluated?(A, <state> STATE </state> ... </k>
     <state> _ => STATE </state>

rule <k> V:Value ~> evaluated?(A, <state> STATE </state>) => DO_SOMETHING_WHEN_EVALUATED ... </k>
rule <k> NOT_VALUE:Exp ~> evaluated?(A, <state> STATE </state>) => DO_SOMETHING_WHEN_NOT_EVALUATED ... </k>

请注意,我在这里使用“已降到排序Value”来确定它是否是“评估的”,但是您当然可以有确定它的任何附加条件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61530316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档