kframework - K 框架:函数声明中的语义转换问题
问题描述
我正在尝试将 erlang 语义从 K 3.6 更新到 5.0,但遇到了以下问题:
当我尝试编写没有语义转换的函数声明时,它工作正常:
规则名称:Atom(Args) -> Body 。=>。... [结构]
但是当我需要编写以下内容时,kompile 会输出[Error] Inner Parser: Parse error: unexpected token ')'。
规则名称:Atom(Args:Values) -> Body => 。... [结构]
为了重现,这是我的简化语法:
imports STRING
syntax UnquotedAtom ::= r"[a-z][_a-zA-Z0-9@]*" [token]
syntax Atom ::= UnquotedAtom | Bool
syntax Exp ::= Atom
syntax Exps ::= List{Exp, ","} [strict, klabel("exps"), prefer, listexps]
syntax FunCl ::= Atom"("Exps")" "->" Exps "." [funcl1]
syntax Value ::= Atom
syntax Values ::= List{Value, ","}
syntax Exp ::= Value
syntax KResult ::= Value
// Function declaration
//ok
rule <k>Name:Atom(Args) -> Body . =>. ...</k> [structural]
// unexpected token ')'
rule <k>Name:Atom(Args:Values) -> Body => . ...</k> [structural]
我的 K 版本是:RV-K 版本 1.0-SNAPSHOT Git 修订版:adf2f2d Git 分支:未知构建日期:2021 年 3 月 16 日星期二 16:43:04 CET
解决方案
从 K3 到 K5 的变化之一是,如果元素被子排序,列表将不再自动子排序。如果手动添加
syntax Exps ::= Values
然后你的规则将再次编译。
推荐阅读
- google-app-engine - 为什么 Google 删除了运行 Python 3.7 的 App Engine 的 Image API?
- javascript - 如何防止在骆驼中重新加载javascript?
- python - np.where 不会更改给定列表列表的 numpy 数组
- javascript - Javasciprt Post 错误:发送后无法设置标头
- c# - 415 调用文件上传api时不支持的媒体类型
- kubernetes - 作业完成后如何自动删除 Kubernetes 作业
- python - 如何在keras中向LSTM输入几个时间序列
- wordpress - 更改标签固定链接结构
- python - 第一个文件路径值未添加到 linux ubuntu 上的数组中
- autosar - uart 如何在 autosar 的 lin 模块中实现,或者如何将 LIN 配置为 uart ..?