【发布时间】:2021-04-21 17:24:42
【问题描述】:
我最近遇到了一些合金模型,其中包含与模型中的任何块无关的“let”语句。 Alloy Analyzer 可以很好地解析这些模型,所以我知道这是有效的 Alloy 语法。但是,https://alloytools.org/download/alloy4-grammar.txt 上发布的 Alloy v4 语法或 Daniel Jackson 关于 Alloy 的书中的语法中没有规定“let”语句可以出现在块之外。以下摘录显示了这些“let”语句的示例。
let bitXorTable = {
i: bits,
j: bits,
k: bitAndTable[bitOrTable[i, j], bitNotTable[bitAndTable[i, j]]]
}
pred halfAdder(m: Int, n: Int, s: Int, c: Int) {
s = bitXorTable[m, n]
c = bitAndTable[m, n]
}
我正在为 Alloy 创建一个 ANTLR 解析器,我想知道是否应该将此规则添加到我的语法中。难道这些“let”语句仅在 Alloy 的某些版本(较新/较旧)中有效?
【问题讨论】:
-
我后来发现 Antlr 示例存储库中有一个 Alloy 语法。 github.com/antlr/grammars-v4/blob/master/alloy/alloy.g4
标签: alloy