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  中场变量定义、表达
   152   153   154   155   156   157   158   159   160   161   162