我对了解 K 前奏特别感兴趣(它的结构,为什么它的内容是这样的,“kompile”如何计算依赖关系等)。主要问题是:将 K 前奏曲中的钩子符号复制到生成的 Kore 文件中的标准是什么?
这里有一些潜在问题的例子:
符号andBool与其关联的重写规则一起复制,符号in_keys似乎不是这种情况,它只是在没有重写规则的情况下复制。其他符号似乎是无用的(对于 IMP 语义),但在生成的 Kore 文件中存在,无论是否有其重写规则,例如countAllOccurrences、findChar、signExtendBitRangeInt或Float2String。
似乎SortId是由 line 生成的
syntax Id [token]
。但是,线条"syntax Bool ::= "true" [token]
并syntax Bool ::= "false" [token]
不会生成真假符号。(此外,是否选择true和false是值而不是构造函数?)以下示例未生成名为SortId的排序,而一些生成的挂钩符号依赖于此排序。IMP 语义不存在这个问题。
module MAX-OW-SYNTAX
imports INT
imports BOOL
syntax Exp ::= Int | "(" Exp ")" [bracket]
| "max" Exp Exp
endmodule
module MAX-OW
imports MAX-OW-SYNTAX
syntax KResult ::= Int
rule max X Y => Y requires X <Int Y
rule max X _ => X [owise]
endmodule
在每个后端的每种语言中都实现了 K prelude 是否正确,并且在 K prelude 中可以使用 Kore 语言的实现?你有必要的接口来实现一个新的后端吗?(例如,
Bag
是过时的,但不是Set
,List
和Map
,但我不知道新后端必须提供的集合运算符、映射运算符等的列表。)andThenBool和andBool一旦在 Kore 语法(布尔模块)中实现后具有相同的语义,有什么原因吗?
为==Bool定义的重写规则在哪里,在=/=Bool(布尔模块)的定义中使用?