一种代码结构视图解析及预览方法技术

技术编号:33558721 阅读:20 留言:0更新日期:2022-05-26 22:55
本发明专利技术提供了一种代码结构视图解析及预览方法,包括代码预处理模块、代码解析模块、结果处理模块和结果存储模块;所述代码预处理模块用于接收请求方传递的代码文件,确定代码文件语言类型,计算代码文件内容md5,判断是否已有历史分析结果;所述代码解析模块用于分析代码文件,结合代码文件所涉及的语言类型进行解析,从而获得语法解析树;并基于语法解析树的访问者模式,从代码文件语法入口规则开始进行解析,得到代码结构分析结果;本发明专利技术可实现支持几乎所有主流语言文件代码结构视图在线预览,并支持目标代码跳转、定位,显著提高代码阅读效率,提升易用性。提升易用性。提升易用性。

【技术实现步骤摘要】
一种代码结构视图解析及预览方法


[0001]本专利技术涉及代码分析领域,具体是一种代码结构视图解析及预览方法。

技术介绍

[0002]代码结构视图是开发人员在IDE中开发代码时,IDE会同时给出当前代码的总体组成结构:比如包含哪些类声明,方法、函数声明以及对应的参数返回值等签名信息,全局声明语句等,让开发人员对当前代码的总体结构有个全局的预览,方便开发工作。
[0003]IDE中代码结构视图采用的技术一般是基于具体语言的代码抽象语法树(AST)进行解析的,抽象语法树即基于文本代码转换得到的树形结构,每个节点都会对应到具体的代码,包括行信息、语句类型,上下文以及子节点等信息。代码从文本到转换成计算机可执行的程序一般都会经过词法分析、语法分析的过程,进而得到抽象语法树,再进行后续编译、执行。
[0004]代码结构视图一般是在开发人员本地IDE(开发工具)中集成展示的,但是在目前市面上常见的Saas代码托管平台中,其代码浏览页面尚未有代码总体结构视图展示功能,不太方便代码结构实时预览以及目标代码定位。并且,现有技术实现基于抽象语法树:需要将代码文本转化为树形结构进行存储和遍历,比较复杂,且解析效率相对较低。

技术实现思路

[0005]本专利技术的目的在于提供一种代码结构视图解析及预览方法,以解决上述
技术介绍
中提出的问题。
[0006]为实现上述目的,本专利技术提供如下技术方案:
[0007]一种代码结构视图解析及预览方法,包括代码预处理模块、代码解析模块、结果处理模块和结果存储模块;
[0008]所述代码预处理模块用于接收请求方传递的代码文件,确定代码文件语言类型,计算代码文件内容md5,判断是否已有历史分析结果;
[0009]所述代码解析模块用于分析代码文件,结合代码文件所涉及的语言类型进行解析,从而获得语法解析树;并基于语法解析树的访问者模式,从代码文件语法入口规则开始进行解析,得到代码结构分析结果;
[0010]所述结果处理模块用于解析代码结构分析结果,通过结构化的方式进行描述,并将结构化结果进行持久化存储,同时将代码结构分析结果返回给请求方进行展示;结构化结果按照代码内容的md5为键值进行存储,若请求的代码内容md5在历史分析结果中已存在则不用重复分析;
[0011]所述结果存储模块用于存储结构化结果,方便查询;
[0012]具体步骤如下:
[0013]步骤一:首先在代码浏览页面,由请求方发起解析代码文件的代码结构请求,将代码文件传递至代码解析服务;
[0014]代码预处理模块接收请求方发送的代码文件,以及代码文件相关参数,并对接收内容进行预处理:分析代码文件所属语言类型、计算代码文件md5、计算代码文件大小、分析代码文件的代码内容;
[0015]通过md5判断当前代码文件是否已有历史分析记录,如果已分析过,可直接查询历史分析结果并返回;如果未分析过,则进行下一步;
[0016]步骤二:针对步骤一得到的代码内容和语言类型,调用该语言基于Antlr4生成的词法、语法分析程序进行词法解析以及语法解析,得到语法解析树;并从该语言语法描述的入口规则基于访问者模式对代码结构进行分析;
[0017]仅分析代码文件结构相关的规则,对于不关注的子规则不进行分析;当分析到函数声明语句时,仅分析函数名以及函数签名;
[0018]通过访问者模式有针对性的分析顶层节点及其子节点即可获得代码的结构;如果是函数声明语句,可进一步基于语法解析树节点的上下文信息获取函数名以及函数参数返回值,以及函数所在文件路径、行号;
[0019]在遇到代码文件中包含语法错误时,根据Antlr4的特性仍可以生成语法解析树,保证分析程序可以继续正常进行分析,从而得到代码文件的代码结构;
[0020]在分析过程中,由结果处理模块对代码结构分析结果进行收集,收集的信息包含当前分析文件的类声明语句及其相关信息,结构体声明及其相关信息,函数、方法声明语句及其相关信息;
[0021]步骤三、步骤二中分析所得的结构化结果以文件md5为键值进行存储,同时将代码结构分析结果返回给请求方;
[0022]步骤四、请求方收到代码结构解析结果,由代码平台进行代码结构视图展示,从而实现代码结构视图在线实时预览,基于语句的文件、行号进行代码跳转、定位。
[0023]作为本专利技术进一步的方案:所述代码解析模块包括基于Antlr4和各常用开发语言的语法描述文件,生成常用开发语言的词法、语法分析程序,以及语法解析树遍历程序。
[0024]作为本专利技术进一步的方案:所述代码结构分析结果包含的信息有:文件的包声明、模块声明、依赖模块导入声明、类定义、结构体定义、函数定义、函数参数列表、全局变量声明、常量声明。
[0025]作为本专利技术进一步的方案:所述结构化结果包含的信息有:代码文件结构中各语句的代码内容、所属行号、列号,词法类型。
[0026]与现有技术相比,本专利技术的有益效果是:
[0027]本专利技术采用上述方法后,可实现支持几乎所有主流语言文件代码结构视图在线预览,并支持目标代码跳转、定位,显著提高代码阅读效率,提升易用性。用户在代码平台浏览某语言代码文件时,可基于本专利技术进行实时解析,获得当前文件的代码总体结构视图进行展示,用户可清晰知道当前文件包含哪些类、方法、函数,全局变量声明等总览信息。点击某个结构体或方法,可实时定位到该对象对应的代码行进行浏览。
附图说明
[0028]图1为一种代码结构视图解析及预览方法的流程图。
具体实施方式
[0029]下面结合具体实施方式对本专利的技术方案作进一步详细地说明。
[0030]请参阅图1,一种代码结构视图解析及预览方法,包括代码预处理模块、代码解析模块、结果处理模块和结果存储模块;所述代码预处理模块用于接收请求方传递的代码文件或者代码文本内容,确定代码文件语言类型,计算代码文件内容md5,判断是否已有历史分析结果。所述代码解析模块用于分析代码文件,结合代码文件所涉及的语言类型进行解析,从而获得语法解析树;并基于语法解析树的访问者模式,从代码文件语法入口规则开始进行解析,得到代码结构分析结果。
[0031]所述代码解析模块包含基于Antlr4和各常用开发语言的语法描述文件(.G4后缀),生成常用开发语言的词法、语法分析程序,以及语法解析树遍历程序。所述代码结构分析结果一般包含的信息有(不同的语言根据语法不同会略有不同):文件的包声明、模块声明、依赖模块导入声明、类定义、结构体定义、函数定义、函数参数列表、全局变量声明、常量声明等语句。
[0032]所述结果处理模块用于解析代码结构分析结果,通过结构化的方式进行描述,并将结构化结果进行持久化存储,同时将代码结构分析结果返回给请求方进行展示;结构化结果按照代码内容的md5为键值进行存储,若请求的代码内容md5在历史分析结果中已存在则不用重复分析;所述结构化结果包含的信息有:代码文件结构中各语句的代码内容本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码结构视图解析及预览方法,其特征在于,包括代码预处理模块、代码解析模块、结果处理模块和结果存储模块;所述代码预处理模块用于接收请求方传递的代码文件,确定代码文件语言类型,计算代码文件内容md5,判断是否已有历史分析结果;所述代码解析模块用于分析代码文件,结合代码文件所涉及的语言类型进行解析,从而获得语法解析树;并基于语法解析树的访问者模式,从代码文件语法入口规则开始进行解析,得到代码结构分析结果;所述结果处理模块用于解析代码结构分析结果,通过结构化的方式进行描述,并将结构化结果进行持久化存储,同时将代码结构分析结果返回给请求方进行展示;结构化结果按照代码内容的md5为键值进行存储,若请求的代码内容md5在历史分析结果中已存在则不用重复分析;所述结果存储模块用于存储结构化结果,方便查询;具体步骤如下:步骤一:首先在代码浏览页面,由请求方发起解析代码文件的代码结构请求,将代码文件传递至代码解析服务;代码预处理模块接收请求方发送的代码文件,以及代码文件相关参数,并对接收内容进行预处理:分析代码文件所属语言类型、计算代码文件md5、计算代码文件大小、分析代码文件的代码内容;通过md5判断当前代码文件是否已有历史分析记录,如果已分析过,可直接查询历史分析结果并返回;如果未分析过,则进行下一步;步骤二:针对步骤一得到的代码内容和语言类型,调用该语言基于Antlr4生成的词法、语法分析程序进行词法解析以及语法解析,得到语法解析树;并从该语言语法描述的入口规则基于访问者模式对代码结构进行分析;仅分析代码文件结构相关的规则,对于不关注的子规则不进行分析;...

【专利技术属性】
技术研发人员:何军
申请(专利权)人:北京简单一点科技有限公司
类型:发明
国别省市:

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

1