Page 156 - 《软件学报》2024年第6期
P. 156
2732 软件学报 2024 年第 35 卷第 6 期
● M Id : 语义模块的序号, 由编译系统的解析层在生成每一个标准化语义模块时给出, 在上一个语义模块序号
的基础上递增. 初始语义模块序号为 00000001.
● M Name : 语义模块的名称, 对应于 SwarmL 程序中场变量定义、表达式、语句等不同类型语言要素的名称.
● M Type : 语义模块的类型码. SwarmL 中场变量定义、表达式、语句等不同类型的语言要素都被归纳为若干
种类的语义模块. 类型码表示每个语义模块所执行的群体智能计算逻辑.
● Var In , Var Out : 输入和输出变量名称. 每种语义模块都对应相应的参与计算的输入变量, 和计算结果输出变
量. 不同类型的语义模块, 因其计算功能不同, 其输入输出变量的个数和描述方法可能不同.
(2) 逻辑链
语义模块序列仅按照 SwarmL 程序的语法顺序对语义模块进行了简单排列, 并不能反映实际语义执行顺序.
将语义模块看作基本单元, 根据每一个语义模块的后续模块的名称以及执行这些后续模块的逻辑条件, 就可以完
整描述整个逻辑链, 其反映了全分布式智能建筑系统控制任务的整体逻辑. 从逻辑链中的某个语义模块的角度, 逻
辑链可以表示为一个四元组:
Logic Chain = <M Id , M NextNameList , Var Logic , Cond Logic >.
● M Id : 本语义模块的序号, 是该模块在整个逻辑链中唯一的标识.
● M NextNameList : 本语义模块的后续 1–n 个语义模块的名称. 每个语义模块可以有多个后续语义模块, 也可以没
有后续语义模块.
● Var Logic : 到后续 1–n 个语义模块的逻辑判断变量名称, 也是模块间同步并行执行的依据. 本语义模块后面跟
随的各个模块, 可以有条件执行或者无条件执行. 逻辑链中, 允许用某个变量的值作为判定条件来判定语义模块是
否执行.
● Cond Logic : 逻辑条件. 当后续语义模块的执行有条件时, 本字段描述后续模块的执行, 是在对应判断变量的
逻辑值为 1 时执行, 还是在逻辑值为 0 时执行. 例如, 当逻辑判断变量的值为 0 时, 执行语义模块序号为 M1 的后
续模块, 当该变量的值为 1 时, 执行语义模块序号为 M2 的后续模块.
中间层既携带高级的群体智能应用程序中的计算信息, 又便于之后的代码生成过程. 在后续代码生成阶段, 通
过语义模块中包含的群体智能算子可以识别每个语义模块的功能, 并生成相应的目标代码. SwarmL 程序和标准
化语义模块、逻辑链的对应关系如后文图 5 所示, 其中每条语句对应一个标准化语义模块. 具体的中间代码格式
文档和案例程序已开源 [32] . 1
中间层将每种类型的群体智能运算表示为输入输出变量和群体智能算子相结合的通用化语义模块序列, 实现
了群体智能计算类型和数据的解耦, 并且其标准化定义了语义模块之间执行的先后顺序关系. 标准化语义模块和
其中的群体智能算子对 SwarmL 语言进行了一定封装, 在编译过程中无需进行全局再编译. 只需修改中间层中输
入输出变量接口以及中间层到目标代码的接口规则, 该中间层即可应用至不同类型的群体智能硬件平台, 进而屏
蔽目标硬件平台的异构性. 这种将领域特定语言转换为标准化中间表示进而适应不同硬件平台的思想方法, 具备
一定的普适性, 对其他领域特定语言的编译开发具有借鉴意义.
2.2.2 构建标准化语义模块类型库
SwarmL 程序中场变量、计算域等元素代表着不同类型的群体智能计算逻辑, 但这些高级编程抽象无法直接
被硬件平台所识别. 本节根据源程序中不同语言元素的特征建立对应的标准化语义模块类型库. 通过说明每种语
义模块对应的 SwarmL 元素的表达形式, 为标准化语义模块序列的生成提供模板信息.
以全局参数表达式为例, 运算符的差异和两侧参数的计算域差异等都可能产生不同的并行计算语义, 进而产
生不同类型的语义模块. 例如, 对于第 1.3 节的案例 中的表达式, 当等号左侧参数的计算域为 All, 右侧参数计算
域为 StartNode 时能够实现全局扩散任务, 而当等号右侧为常数 constant 时, 表示所有节点的本地运算. 因此, 从运
算符和计算域两个维度出发, 排列组合两个维度中的不同特征, 可以建立对应于全局参数表达式的标准化语义模
块类型库.
表 1 以赋值、加法和乘法运算表达式为例, 展示了左右两侧参数的计算域的组合所对应的语义模块类型. 完