代码处理方法、装置和电子设备制造方法及图纸

技术编号:36536758 阅读:23 留言:0更新日期:2023-02-01 16:22
本申请实施例提供了一种代码处理方法、装置和电子设备。在实施例中,基于原始代码文件生成抽象语法树AST;从AST语法树中识别出匹配预设条件的若干语法元素和所述若干语法元素涉及的引用关系;基于该若干语法元素和引用关系,以及各个语法元素到AST语法树的映射,构建逻辑模型;基于该逻辑模型,根据用户自定义的处理规则访问AST语法树,得到对原始代码文件的处理结果。由此,通过构建逻辑模型作为AST语法树的索引,可以为用户提供语法元素之间逻辑关系的简化、高可读性视图,帮助用户更容易地获得原始代码的全局语义信息,应用复杂的代码处理规则。处理规则。处理规则。

【技术实现步骤摘要】
代码处理方法、装置和电子设备


[0001]本申请涉及计算机
,尤其涉及一种代码处理方法、装置和电子设备。

技术介绍

[0002]在许多场景下,都需要进行代码的语法转换。举例来说,结构化查询语言(Structured Query Language,简称SQL)是关系数据库访问的标准语言,许多非关系数据库也支持SQL,但各厂家往往会在标准SQL基础上作扩展,造成不同厂商的SQL语法存在差异,同时非关系数据库的SQL语法与标准SQL也存在一定的差别,这些都导致了异构数据库的互操作问题,SQL脚本语法转换是解决此种互操作问题的重要途径。
[0003]然而,目前的语法转换方式存在通用性偏低、难以实现复杂的语法转换等问题。因此,需要一种语法转换方案,可以更好地满足实际应用需求。

技术实现思路

[0004]本申请实施例提供了一种代码处理方法、装置和电子设备,能够很好地适用于各类语法转换场景,降低使用门槛,使得用户可以轻松处理代码中的复杂结构和复杂元素。
[0005]第一方面,本申请实施例提供了一种代码处理方法,包括:
[0006]基于原始代码文件生成抽象语法树AST;从AST中识别出匹配预设条件的若干语法元素和若干语法元素涉及的引用关系;基于若干语法元素和引用关系,以及各个语法元素到AST的映射,构建逻辑模型;基于逻辑模型,根据用户自定义的处理规则访问AST,得到对原始代码文件的处理结果。
[0007]本申请实施例通过构建逻辑模型作为AST树的索引,可以忽略大部分不需要关注的语法元素,为开发者提供语法元素之间逻辑关系的简化视图,以及辅助理解全局语义的引用关系,从而能够有效处理复杂语法元素,便于实现语法转换、代码分析或代码检测等。
[0008]在一种可能的实现方式中,基于原始代码文件生成抽象语法树AST,具体包括:获取与原始代码文件的语法规则对应的上下文无关文法CFG;通过将CFG输入语法解析器生成装置,得到语法解析器;利用语法解析器读取原始代码文件,得到AST。
[0009]这样,用户无需开发语法解析器,而是可以利用自动生成的语法解析器生成AST语法树。
[0010]在一种可能的实现方式中,从AST中识别出匹配预设条件的若干语法元素和若干语法元素涉及的引用关系,具体包括:在采用树遍历算法遍历AST的过程中,识别出若干语法元素和引用关系。
[0011]这样,采用树遍历算法可以实现对AST树中语法元素的高效识别。
[0012]在一种可能的实现方式中,基于若干语法元素和引用关系,以及各个语法元素到AST的映射,构建逻辑模型,包括:
[0013]基于各个语法元素和其到AST的映射,构建对应的管理对象;基于管理对象和引用关系,构建逻辑模型。
[0014]进一步,在一个实施例中,逻辑模型为树结构,树结构中以管理对象为节点,以管理对象中的语法元素涉及的引用关系作为节点属性。
[0015]在一个更具体的实施例中,处理规则包括移动某段代码的位置的规则;基于逻辑模型,根据用户自定义的处理规则访问AST,得到对原始代码文件的处理结果,包括:
[0016]接收用户将第一节点从树结构中移除并作为第二节点的子节点的操作;基于操作,根据第一节点所对应管理对象中的映射,索引到AST中的子树;将根据子树索引到的一段代码移动至原始代码文件中对应第二节点的位置。
[0017]在另一个实施例中,逻辑模型为图结构,图结构中以管理对象为图节点,在具有引用关系的管理对象之间建立连接边。
[0018]在一个可能的实现方式中,处理规则涉及对某种代码特征进行判断、替换代码中的某个字符串、移动某段代码的位置、增加某段代码或删除某段代码。
[0019]在一个可能的实现方式中,方法还包括:
[0020]在检测到内存不足的情况下,删除AST并释放其对应的内存;在原始代码文件被引用的情况下,根据原始代码文件重新生成AST。
[0021]在一个可能的实现方式中,预设条件包括预先设定的节点类型和/或节点属性。
[0022]在一个可能的实现方式中,各个语法元素到AST的映射包括:指向AST中对应子树的内存位置,和/或,自AST根节点到子树的根节点的路径。
[0023]第二方面,本申请实施例提供了一种代码处理装置,包括:
[0024]生成单元,用于基于原始代码文件生成抽象语法树AST;识别单元,用于从AST中识别出匹配预设条件的若干语法元素和若干语法元素涉及的引用关系;构建单元,用于基于若干语法元素和引用关系,以及各个语法元素到AST的映射,构建逻辑模型;处理单元,用于基于逻辑模型,根据用户自定义的处理规则访问AST,得到对原始代码文件的处理结果。
[0025]本申请实施例通过构建逻辑模型作为AST树的索引,可以忽略大部分不需要关注的语法元素,为开发者提供语法元素之间逻辑关系的简化视图,以及辅助理解全局语义的引用关系,从而能够有效处理复杂语法元素,便于实现语法转换、代码分析或代码检测等。
[0026]在一种可能的实现方式中,生成单元具体用于:
[0027]获取与原始代码文件的语法规则对应的上下文无关文法CFG;通过将CFG输入语法解析器生成装置,得到语法解析器;利用语法解析器读取原始代码文件,得到AST。
[0028]这样,用户无需开发语法解析器,而是可以利用自动生成的语法解析器生成AST语法树。
[0029]在一种可能的实现方式中,预设条件包括预先设定的节点类型和/或节点属性。
[0030]在一种可能的实现方式中,识别单元具体用于:
[0031]在采用树遍历算法遍历AST的过程中,识别出若干语法元素和引用关系。
[0032]这样,采用树遍历算法可以实现对AST树中语法元素的高效识别。
[0033]在一种可能的实现方式中,各个语法元素到AST的映射包括:指向AST中对应子树的内存位置,和/或,自AST根节点到子树的根节点的路径。
[0034]在一种可能的实现方式中,构建单元具体用于:
[0035]基于各个语法元素和其到AST的映射,构建对应的管理对象;基于管理对象和引用关系,构建逻辑模型。
[0036]进一步,在一个实施例中,逻辑模型为树结构,树结构中以管理对象为节点,以管理对象中的语法元素涉及的引用关系作为节点属性。
[0037]在一个更具体的实施例中,AST中包括第一语法元素和第二语法元素,第一语法元素是第二语法元素的祖先;在树结构中,包含第一语法元素的管理对象是包含第二语法元素的管理对象的祖先。
[0038]在一个更具体的实施例中,管理对象中还包括其子节点的链接列表,和/或,其父节点的链接。
[0039]在一个更具体的实施例中,处理规则包括移动某段代码的位置的规则;处理单元具体用于:接收用户将第一节点从树结构中移除并作为第二节点的子节点的操作;基于操作,根据第一节点所对应管理对象中的映射,索引到AST中的子树;将根据子树本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码处理方法,其特征在于,包括:基于原始代码文件生成抽象语法树AST;从所述AST中识别出匹配预设条件的若干语法元素和所述若干语法元素涉及的引用关系;基于所述若干语法元素和引用关系,以及各个语法元素到所述AST的映射,构建逻辑模型;基于所述逻辑模型,根据用户自定义的处理规则访问所述AST,得到对所述原始代码文件的处理结果。2.根据权利要求1所述的方法,其特征在于,基于所述若干语法元素和引用关系,以及各个语法元素到所述AST的映射,构建逻辑模型,包括:基于所述各个语法元素和其到所述AST的映射,构建对应的管理对象;基于所述管理对象和所述引用关系,构建逻辑模型。3.根据权利要求2所述的方法,其特征在于,所述逻辑模型为树结构,所述树结构中以所述管理对象为节点,以所述管理对象中的语法元素涉及的引用关系作为节点属性。4.根据权利要求3所述的方法,其特征在于,所述处理规则包括移动某段代码的位置的规则;基于所述逻辑模型,根据用户自定义的处理规则访问所述AST,得到对所述原始代码文件的处理结果,包括:接收用户将第一节点从所述树结构中移除并作为第二节点的子节点的操作;基于所述操作,根据所述第一节点所对应管理对象中的映射,索引到所述AST中的子树;将根据所述子树索引到的一段代码移动至所述...

【专利技术属性】
技术研发人员:何文裕
申请(专利权)人:超聚变数字技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1