Page 157 - 《软件学报》2024年第6期
P. 157
陈文杰 等: 面向全分布式智能建筑系统应用程序的并行化编译方法 2733
整的标准化语义模块类型库已开源 [32] . 编译系统在遍历 SwarmL 程序的抽象语法树时, 根据运算符、计算域等元
素查询该语义模块类型库, 能够匹配并生成该程序段所对应的标准化语义模块类型. 图 5 给出了 SwarmL 程序与
标准化语义模块类型库的对应关系.
SwarmL 程序
1 VAR FireAlarm {NodeType: ROOM; VPN: EvacuationSystem;DataType: bool}
2 bool FireSource (Refer to: FireAlarm @global: StartNode);
3 bool Alarm (Refer to: FireAlarm @global: All);
4 if (FireSource != 0) { // 如果任一区域发生火灾
5 Alarm = FireSource; }
a
标准化语义模块格式库
标准化语义模块序列 逻辑链
“Json_Type”: “Standardized_Semantic_Module”, “Json_Type”: “Logic_Chain”,
“Data”: [ “Data”: [
{ “SSM_Id”: “00000001”, { “SSM_Id”: “START”,
“SSM_Type_Id”: “0x00000001”, “Next_SSM_List”: [ {
标准化语义模块类型库 “SSM_Type_Name”: “Var_Define”, “SSM_Id”: “00000001”,
“Data”: [ “Logical_Var_Name”: “none”,
“VarName”: “FireAlarm”, “Logical_Condition ”: “none”
“Nodetype”: “ROOM”, }]
“VPN”: “EvacuationSystem”, },
“DataType”: “bool”]
},
{ “SSM_Id”: “00000001”,
d { “SSM_Id”: “00000003”, “Next_SSM_List”: [{
“SSM_Type_Id”: “0x000000B9”, “SSM_Id”: “00000002”,
“Logical_Var_Name”: “none”,
“SSM_Type_Name”: “StartNode_!=_Constant” , “Logical_Condition ”: “none”
START “Data”: [ }]
“Result_Var”: “ res”,
},
“Operator_Left_Var”: “ 0”,
00000001 “Operator_Right_Var”: “FireSource”, ……
00000001 “Operator”: “!=” ]
},
00000002 …… { “SSM_Id”: “000000003”,
00000002 “Next_SSM_List”: [{
“SSM_Id”: “00000004”,
{ “SSM_Id”: “00000004”, “Logical_Var_Name”: “res”,
00000003 res = 1 “SSM_Type_Id”: “0x00000011”, “Logical_Condition”: “1”},
00000003 00000004 “SSM_Type_Name”: “All_=_StartNode”, { “SSM_Id”: “END”,
“Data”: [ “Logical_Var_Name”: “res”,
res = 0 “Result_Var”: “ Alarm”, “Logical_Condition”: “0”
00000004 “Operator_Right_Var”: “FireSource”, }]
END “Operator”: “=” ] }
},
e b c
图 5 SwarmL 源程序与标准化语义模块和逻辑链对应示意图
表 1 全局参数表达式对应的标准化语义模块类型库
运算符左右两侧参数的计算域
运算符
All 和 All All 和StartNode All 和 constant StartNode 和 StartNode StartNode 和constant
= 0x00000010 0x00000011 0x00000012 0x00000013 0x00000014
+ 0x00000020 0x00000021 0x00000022 0x00000023 0x00000024
* 0x00000040 0x00000041 0x00000042 0x00000043 0x00000044
3 编译系统实现
本节实现了面向群体智能系统应用程序的编译系统. 提出编译群体智能系统应用程序的具体算法, 包括源程
序预处理和结构化解析, 源程序到标准化语义模块序列, 语义模块序列到逻辑链, 以及逻辑链到目标平台指令程序
的编译算法. 另外, 开发了具有程序编辑和目标代码生成功能的可视化编译系统工具.
3.1 源程序预处理和结构化解析
该部分对源程序进行结构化解析并分类存储以为后续编译阶段提供输入. 如图 6 所示, 首先格式化处理
SwarmL 程序, 以删除冗余的空格字符, 并合并或分割行, 避免编译期间的歧义. 根据 SwarmL 中场变量定义、表达