Page 113 - 《软件学报》2026年第2期
P. 113
592 软件学报 2026 年第 37 卷第 2 期
抽象语法树解析模块的框架如图 3 所示. 抽象语法树解析模块中的代码解析器使用 Python 标准库中的 AST
模块进行代码解析, 首先会将源深度学习框架搭建的神经网络模型代码中的所有字符串, 通过词法分析分割成若
干标记 (tokens), 每个标记代表代码中的一个单词、操作符或标点符号等. 这些标记通常是以空格或其他特定字符
进行分割. 然后再通过语法分析将标记按照语法规则组成语句和表达式, 并构建成一棵抽象语法树, 来表示代码的
结构和逻辑. 该模块的底层实现基于 Python 的解释器架构 CPython, 其语法规则遵循 Python 语言标准, 直接支持
Python 语言的最新特性, 最终生成的语法树节点类型包括表 3 中的示例. 此时, 神经网络模型的代码字符串已经解
析成承载所有代码信息的抽象语法树.
抽象语法树解析模块
Node
代码解析器
tokens
Սم ეم
ٳ༅ ٳ༅
Node Node Node
源框架下的
模型代码
抽象语法树
图 3 抽象语法树解析模块的框架
代码 1 的作用是定义一个简单的卷积神经网络模型, 可以用于图像分类、目标检测等任务. 在训练时, 可以将
forward 方法中进行前向传播, 根据预测结果与真实标签计算损失并反向传播更新模型参
训练数据传入该模型的
数. 代码中主要包含两条导入模块语句和一个面向对象的类, 且类中包含两个方法. 导入的模块是 PyTorch 框架专
门为神经网络设计的模块化接口 torch.nn, 这段代码定义一个继承自 nn.Module 的类 Model, 表示了一个简单的神
conv, 卷积层的输入通道数为 3, 输出通道数为 64, 卷积核大小为 7×7, 步长
经网络模型. 该模型包含一个卷积层
为 2, 填充宽度为 3. 方法接收一个输入 x, 将其传入卷积层 conv, 计算输出 o 并返回.
net1 = torch.nn.Conv2d(120,240,4,stride = 2) 传递到抽象语法树解析模块后可以得到对应的抽象语法
将代码
树, 如图 4 所示. 代码中等号左右的变量名称和调用语句分别转换成抽象语法树中的 Name 节点和 Call 节点, 算子
内部的变量名称及其变量值也都转换成抽象语法树中对应的节点.
“ ”
“ ”
2
“ ” List
List
“ ”
“ ”
图 4 抽象语法树示例
4.3 抽象语法树改写模块
在得到抽象语法树解析模块输出的抽象语法树后, 将其作为迁移程序的中间件, 对树中相应的节点进行针对

