语法
Alloy 语法易于阅读和编写。它有两个主要元素:属性 (Attributes) 和 块 (Blocks)。
Alloy 配置语法是一种用于创建可编程流水线的声明式 (declarative) 语言。Alloy 配置文件中块和属性的顺序无关紧要。该语言会评估所有元素之间的依赖关系,以确定它们的关系。
注释
Alloy 配置文件支持单行 //
注释和块 /* */
注释。
标识符
Alloy 语法中的标识符必须包含一个或多个 UTF-8 字母(大写或小写 A 到 Z)、数字或下划线。不能以数字开头。
属性和块
属性
使用 属性 (Attributes) 配置单个设置。属性遵循 ATTRIBUTE_NAME = ATTRIBUTE_VALUE
格式。它们可以作为顶级元素出现,也可以嵌套在块内。
以下示例将 log_level
属性设置为 "debug"
。
log_level = "debug"
ATTRIBUTE_NAME
必须是有效的 Alloy 标识符。
ATTRIBUTE_VALUE
可以是有效的 Alloy 类型 的常量值,例如字符串、布尔值或数字。它也可以是一个 表达式,用于计算复杂值。
块
使用 块 (Blocks) 通过花括号将属性或嵌套块分组来配置 Alloy 及其组件的行为。块具有一个名称 (name)、一个可选的标签 (label) 以及一个包含参数和嵌套无标签块的主体。
某些块可以定义多次。
示例
使用以下模式创建无标签块。
BLOCK_NAME {
// Block body can contain attributes and nested unlabeled blocks
IDENTIFIER = EXPRESSION // Attribute
NESTED_BLOCK_NAME {
// Nested block body
}
}
使用以下模式创建有标签块。
// Pattern for creating a labeled block:
BLOCK_NAME "BLOCK_LABEL" {
// Block body can contain attributes and nested unlabeled blocks
IDENTIFIER = EXPRESSION // Attribute
NESTED_BLOCK_NAME {
// Nested block body
}
}
块命名规则
BLOCK_NAME
必须是有效的组件名称或用于配置 Alloy 全局设置的特殊块。如果需要,BLOCK_LABEL
必须是用双引号括起来的有效 Alloy 标识符。使用标签来区分具有相同名称的多个顶级块。
以下代码片段定义了一个名为 local.file
的块,标签为“token”。该块的主体使用表达式将 filename
设置为 TOKEN_FILE_PATH
环境变量的内容。is_secret
属性设置为 true
,表示文件内容是敏感的。
local.file "token" {
filename = sys.env("TOKEN_FILE_PATH") // Use an expression to read from an env var.
is_secret = true
}
终止符
所有块和属性定义都以换行符结束,Alloy 将其称为终止符 (terminator)。当换行符跟在任何表达式、]
、)
或 }
之后时,它充当终止符。Alloy 会忽略其他换行符,因此您可以根据需要添加任意数量的换行符。