19.2. ASL 语言语法
本节的目的是无歧义地说明 ASL 编译器语法检查器所使用的语法规则。
说明:本节给出 ASL 的形式语法。为便于与原始规范、ASL/AML 标识符、编译器输出以及后续章节交叉对照,语法中的非终结符、关键字名和对象名保留英文原名;说明性文字与注释译为中文。
ASL 语句声明对象。每个对象都有三个部分,其中一个是必需的,两个是可选的:
Object := ObjectType FixedList VariableList
FixedList 指的是一个长度已知的列表,用于提供给定 ObjectType 的所有实例都必须具有的数据。固定列表写作 ( a , b , c , … ),其中参数数量取决于具体的 ObjectType,并且某些元素可以是嵌套对象,即 (a, b, (q, r, s, t), d)。FixedList 中的参数可以有默认值,在这种情况下可以跳过。因此,(a,,c) 将导致使用第二个参数的默认值。某些 ObjectType 可以具有空的 FixedList,此时直接省略即可。某些对象类型的尾随参数可以从固定列表中省略,在这种情况下使用默认值。
VariableList 指的是一个长度不预先确定的列表,其中包含帮助定义父对象的子对象。它写作 { x, y, z, aa, bb, cc },其中任何参数都可以是嵌套对象。ObjectType 决定了哪些项是 VariableList 的合法元素。某些 ObjectType 可以具有空的变量列表,此时直接省略即可。
编写 ASL 语句的其他规则如下:
多个空白等同于一个空白。空白、(、)、‘,’ 和换行都是标记分隔符。
// 标记注释的开始,注释从 // 一直持续到该行末尾。
/* 标记注释的开始,注释从 /* 一直持续到下一个 */。
“”(引号)包围一个 ASCII 字符串。
数值常量可以用三种方式书写:普通十进制、八进制(使用 0ddd)或十六进制,使用 0xdd 表示法。
Nothing 表示一个空项。例如,{ Nothing } 等价于 {}。