Page 164 - 《软件学报》2024年第6期
P. 164
2740 软件学报 2024 年第 35 卷第 6 期
算属性码的集合数组映射生成底层指令中的计算属性, 根据局部参数信息和 Ar, Aw, X 变量到 C 语言变量的映射
关系生成底层指令中 Ar, Aw, X 变量的个数, 名称, 数据类型和字节长度等信息, 根据第 3.2.3 节中生成的 C 代码
映射生成指令中所需要的 C 代码的总长度, 校验结果和内容等.
其他类型语言要素对应语义模块的转换算法与此类似. 最后, 按照逻辑链中所包含的先后执行顺序关系, 将这
些分段底层指令序列链接形成完整的底层指令序列, 即智能节点可执行的应用程序. 至此, 编译系统的解析层、中
间层和转换层逐步将 SwarmL 程序编译转换为全分布式智能建筑系统平台可执行目标代码.
另一方面, 许多群体智能系统编程方法具有与 SwarmL 语言类似的程序元素和编程模式. 例如, 物联网编程模
[7]
型 PatRICIA [34] 定义了 IntentScope 原语来动态划分一组物理设备, 机器人群编程语言 Buzz 和无人机群编程框架
PaROS [35] 定义了 Swarm 和 neighbor 原语来对不同范围的群体执行可扩展的集合操作. 这些编程原语虽然种类不
同, 但都支持动态指定群体智能运算任务的计算类型和分布数据. 其与本文标准化中间层中的群体智能算子和计
算域具有相似功能, 都能够方便用户简洁编程群体智能系统应用程序. 因此, 该中间层具有一定的普适性, 通过建
立 SwarmL 群体智能算子到其他语言原语的映射关系, 修改中间层输入输出变量接口以及中间层到目标代码的接
口规则, 可以生成面向机器人群等不同类型群体智能硬件平台的可执行目标代码.
3.5 编译系统工具开发
本文基于 Xtext 插件 [36] 开发了面向群体智能系统应用程序的可视化编译系统工具. 图 10 给出该编译系统工
具的基本架构, 其主要包括源程序结构化解析器和代码生成器两部分. 利用 Java 开发的源程序结构化解析器
(Parser.java) 包括源程序扫描器, 格式化器, 以及解析器. 其中, 源程序格式化器负责获取 SwarmL 程序代码源路径
并读取程序内容, 将 SwarmL 程序格式化, 即删除注释、标点符号、空白区域和换行符等内容. 源程序扫描器逐行
读取关键字、函数、场变量、全局参数表达式等程序内容, 生成携带语法信息的符号流. 解析器根据正则表达式
将 SwarmL 元素解析为抽象语法树, 并存储在 TreeNode 中. TreeNode 包括结点名称, 类型, 状态等类以及调用这
些类的方法. 代码生成器遍历源程序抽象语法树 TreeNode, 根据所设计的标准化语义模块格式库和语义模块类型
库以及 SwarmL 具体编译算法, 生成标准化语义模块序列. 然后将语义模块序列按照实际执行顺序转换为逻辑链,
最后设置目标代码生成路径及格式, 将逻辑链映射为面向全分布式智能建筑系统平台的目标代码.
Program formatter Program scanner Parsing file
+ readSwarmFilePath() + getMacroDefinition() + parseMacroDefinition()
+ getKeyword() + parseKeyword()
+ readFileContent() 1
+ fileContentFormatting() + getFunction() + parseFunction()
+ deleteComment() + getProcess() + parseProcess()
+ deletePunctuation() + getFieldOrientedVariable() + parseFieldOrientedVariable()
+ deleteWhiteSpace() + getGlobalParameterExpression() + parseGlobalParameterExpression()
+ deleteNewline() + getSwarmParallelStatement() + parseSwarmParallelStatement()
+ createTreeNodeList()
1 1
1 1
Source program structured parser Code generator
1 SwarmL compilation system
+ ProgramFormatter + traverseTreeNodeList()
+ SwarmLSyntaxFile + semanticModuleGenerationAlgorithm()
+ ProgramScanner
+ ParsingFile 1 1 + syntaxValidatorFile 1 1 + logicChainGenerationAlgorithm()
+ sourceProgramStructuredParser + objectCodeGenerationAlgorithm()
+ codeGenerator + setCodeGenerationPath()
TreeNode
+ Name: string
+ Type: string
+ State: string Semantic module format library Semantic module type library
+ AttributeInformation: string
+ getName() + ModuleId: int + SwarmElementName: string
+ getType() + ModuleName: string + SwarmElementType: string
+ setName() + ModuleType: string + TypeCode: int
+ setType() + VarInput: string + ComputationalScope: string
...... + VarOutput: string + Operator: string
图 10 编译系统工具架构