本发明专利技术公开了一种基于AST的Java代码SSA单路径的生成方法,其特征是包括如下步骤:步骤10:输入存放.java文件的src目录的路径;步骤11:使用ASTParser获得Java代码的AST;步骤12:使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码;步骤13:使用JDT AST修改单路径代码的AST,将单路径转化为SSA的格式;步骤14:将SSA格式的单路径封装成符合Java语法规范的Java类,存放在path目录下,作为输出。本发明专利技术可以使研究者在该工具的基础上进行代码分析,降低了直接从代码文本进行分析的复杂性。

A generation method of Java code SSA single path based on AST

The invention discloses a method for generating AST code of Java SSA based on single path, which is characterized by comprising the following steps: Step 10: enter the path to store.Java files SRC directory; step 11: using the ASTParser Java code AST; step 12: use the MethodDeclaration ASTVisitor treatment, each method are split into a plurality of single path code; step 13: using JDT AST modified single path code AST, the single path is converted to SSA format; step 14: the single path SSA format package with Java class Java syntax specification, stored in the path directory, as output. The present invention enables researchers to perform code analysis on the basis of the tool, thereby reducing the complexity of analyzing directly from the code text.

【技术实现步骤摘要】

本专利技术涉及一种基于AST的Java代码SSA单路径的生成方法。

技术介绍

程序静态分析(ProgramStaticAnalysis)是在不运行程序的前提下进行的代码分析工作,随着越来越多的代码被上传到开源代码库中,大多数代码不可以直接运行,我们要对这些开源代码进行分析理解,就需要借助静态分析技术。静态分析技术中经常会涉及到符号执行(SymbolicExecution),抽象语法树(AbstractSyntaxTree,AST)分析,控制流分析(ControlFlowAnalysis)等,借鉴这些静态分析技术的思想,我们旨在提供一种Java代码静态单赋值(StaticSingleAssignment,SSA)格式的单路径的生成方法支持Java代码静态分析方面的工作,研究者可以在该工具的基础上进行Java代码的分析,降低了直接从代码文本进行分析的复杂性。JDT(JavaDevelopmentTools)是Eclipse提供的一组用于实现JavaIDE的工具,核心是AST,利用JDT提供的AST访问API,我们可以将Java代码转化成AST,遍历AST树节点,修改AST树结构并将修改写回到源代码。

技术实现思路

针对现有技术中存在的问题,本专利技术目的是,提供一种Java代码SSA格式的单路径的生成方法支持Java代码静态分析方面的工作,研究者可以在该工具的基础上进行Java代码的分析,降低了直接从代码文本进行分析的复杂性。本专利技术是通过以下的技术方案实现的:一种基于AST的Java代码SSA单路径的生成方法,包括步骤:步骤10:输入存放.java文件的src目录的路径;步骤11:使用ASTParser获得Java代码的AST;步骤12:使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码;步骤13:使用JDTAST修改单路径代码的AST,将单路径转化为SSA的格式;步骤14:将SSA格式的单路径封装成符合Java语法规范的Java类,存放在path目录下,作为输出。其中步骤10所输入的Java工程源代码具有如下的目录结构:TestCase类的包名为testcase,有test和test2两个方法,经过步骤14之后,最终的输出结果如下,其中每一个类中均包含若干条path_no方法,其参数和返回值均与路径所在方法相同,no为路径编号:在步骤12中,使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码的过程包括:步骤20:获得MethodDeclaration的Body语句块Block步骤21:依次处理Block中的每一条Statement,将条件分支语句如IfStatement,WhileStatement,ForStatement等拆分成一组平行的分支步骤22:在不同组的平行分支各选一条分支进行组合,得到一条单路径步骤23:穷举所有的分支间的组合情况,得到所有的单路径步骤21涉及到对Block的递归处理,最终得到相应的中间结构,中间结构采用多叉树表示程序的控制流,便于进行路径抽取。步骤22能够对中间结构的不同层级间兄弟节点进行排列组合,得到其中的一条单路径。在步骤13中,将单路径转化为SSA的格式的过程包括:步骤30:使用ASTParser获得单路径代码的AST;步骤31:使用ASTVisitor遍历AST,收集变量的声明、引用、赋值;步骤32:使用ASTRewrite删掉AST所有关于变量声明的ASTNode;步骤33:每当变量被赋值,就为该变量赋予一个新的变量名(对应AST中的SimpleName节点),使之成为一个新变量,该次赋值之后到下一次赋值之前对变量的引用均用新的变量名替换,在程序的开头添加新变量的声明;步骤34:将上述修改操作写回到源代码。本专利技术有益效果:这是一个源代码层面的借助于JDTAST提取Java代码中的单路径然后将其转化为SSA格式的静态分析辅助工具,利用这种工具,Java程序被简化成了一条条SSA格式的单路径代码,从而降低了直接从源代码进行分析的复杂性。附图说明图1本专利技术实施例的Java代码转化为SSA单路径示意图。图2本专利技术实施例的输入目录结构示意图。图3本专利技术实施例的输出目录结构示意图。图4本专利技术实施例的处理条件分支语句获得单路径示意图。图5本专利技术实施例的单路径代码转换为SSA格式示意图。具体实施方式以下结合附图和具体实施例对本专利技术作进一步详细说明。本专利技术方法工作流程如图1-图5所示。图1所示为本方法实施的整体结构和工作原理。本方法的目的是提供一个源代码层面的借助于JDTAST提取Java代码中的单路径然后将其转化为SSA格式的静态分析辅助工具,利用这种工具,Java程序被简化成了一条条SSA格式的单路径代码,从而降低了直接从源代码进行分析的复杂性。本实施例的基于AST的Java代码SSA单路径的生成方法,包括如下步骤:步骤10:输入存放.java文件的src目录的路径;步骤11:使用ASTParser获得Java代码的AST;步骤12:使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码;步骤13:使用JDTAST修改单路径代码的AST,将单路径转化为SSA的格式;步骤14:将SSA格式的单路径封装成符合Java语法规范的Java类,存放在path目录下,作为输出。图2表示的是步骤10所输入的Java工程源代码所在src目录的目录结构。TestCase类的包名为testcase,有test和test2两个方法,经过步骤14之后,最终的输出结果如下(图3表示的是经过步骤14之后,存放单路径代码的path目录所具有的目录结构),其中每一个类中均包含若干条path_no方法,其参数和返回值均与路径所在方法相同,no为路径编号:图4表示的是在步骤12中将每一个方法都拆分成若干条单路径时对条件分支语句的处理示意图,使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码的过程包括:步骤20:获得MethodDeclaration的Body语句块Block;步骤21:依次处理Block中的每一条Statement,将条件分支语句如IfStatement,WhileStatement,ForStatement等拆分成一组平行的分支;步骤22:在不同组的平行分支各选一条分支进行组合,得到一条单路径;步骤23:穷举所有的分支间的组合情况,得到所有的单路径。以下面的代码为例,作为步骤20要处理的函数体:步骤21会涉及到对Block的递归处理,最终得到如下所示的中间结构:步骤22可以得到其中一条单路径,一共有六条这样的单路径:inti;System.out.println(″=======″);i=5;System.out.println(i);intj=i,z=4;j=3;if(j==5);j++;if(j==3);System.out.println(j);z=i+j;if(z==4);System.out.println(z);return;。图5表示的是在步骤13中,将单路径本文档来自技高网...

【技术保护点】

一种基于AST的Java代码SSA单路径的生成方法,其特征在于,包括如下步骤:步骤10:输入存放.java文件的src目录的路径;步骤11:使用ASTParser获得Java代码的AST;步骤12:使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码;步骤13:使用JDT AST修改单路径代码的AST,将单路径转化为SSA的格式;步骤14:将SSA格式的单路径封装成符合Java语法规范的Java类,存放在path目录下,作为输出。

【技术特征摘要】

1.一种基于AST的Java代码SSA单路径的生成方法,其特征在于,包括如下步骤:步骤10:输入存放.java文件的src目录的路径;步骤11:使用ASTParser获得Java代码的AST;步骤12:使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码;步骤13:使用JDTAST修改单路径代码的AST,将单路径转化为SSA的格式;步骤14:将SSA格式的单路径封装成符合Java语法规范的Java类,存放在path目录下,作为输出。2.根据权利要求1所述的基于AST的Java代码SSA单路径的生成方法,其特征在于:所述步骤10所输入的Java工程源代码具有如下的目录结构:TestCase类的包名为testcase,有test和test2两个方法,经过步骤14之后,最终的输出结果如下,其中每一个类中均包含若干条path_no方法,其参数和返回值均与路径所在方法相同,no为路径编号:3.根据权利要求1所述的基于AST的Java代码SSA单路径的生成方法,其特征在于:所述步骤12中,使用ASTVisitor处理所有的MethodDeclaration,将每一个方法都拆分成若干条单路径代码的过程包括:步骤20:获得MethodDeclaration的Body语句块Block;步骤21:依次处理Block中的每一条Statement,将...

【专利技术属性】

技术研发人员:张天,姜人和,潘敏学,陈鑫,吴少博,

申请(专利权)人:南京大学,

类型:发明

国别省市:江苏;32

ast java_一种基于AST的Java代码SSA单路径的生成方法技术相关推荐

  1. matlab读取八叉树,基于八叉树表示的三维栅格地图路径规划系统及方法技术方案...

    [技术实现步骤摘要] 基于八叉树表示的三维栅格地图路径规划系统及方法 本专利技术涉及地图路径规划技术,具体涉及基于八叉树表示的三维栅格地图路径规划系统及方法. 技术介绍 随着各项性能的提高,服务机器人 ...

  2. android 手写字体识别,一种基于Android系统的手写数学公式识别及生成MathML的方法...

    专利名称:一种基于Android系统的手写数学公式识别及生成MathML的方法 技术领域: 本发明属于模式识别技术领域,涉及数学公式中字符间的空间结构分析,具体涉及一种基于Android系统的手写数学 ...

  3. flash写保护原理_一种基于flash写保护的防止flash被意外篡改的方法与流程

    本发明属linux嵌入式芯片安全技术领域于领域,尤其是涉及一种nandflash写保护应用方法. 背景技术: 目前很多公司都纷纷尝试智能设备(sd,smartdevice)领域,sd设备功能越来越多, ...

  4. matlab鬼成像,一种基于光计算的可视化计算鬼成像系统及成像方法与流程

    本发明涉及成像探测领域,具体为一种基于光计算的可视化计算鬼成像系统及成像方法. 背景技术: 光学鬼成像技术是通过双路光信号符合探测恢复待测物体空间信息实现的.其特点是包含物体信息的信号光(signal ...

  5. linux 认证 转发,一种基于Linux系统实现路由器的portal认证报文转发方法和装置

    主权项: 1.一种基于Linux系统实现路由器的portal认证报文转发方法,其特征在于,在Linux系统上创建虚拟网卡,为虚拟网卡配置环回口IP地址,配置portal进程监听环回口的TCP协议预设端 ...

  6. matlab换挡程序,一种基于MATLAB换挡过程中快速锁定分析数据的方法与流程

    本发明涉及汽车变速器数据分析,特别的,涉及一种基于matlab换挡过程中快速锁定分析数据的方法. 背景技术: 自动变速器的核心功能是能根据驾驶员意图进行自动换挡,解放驾驶员的左脚:在自动变速器的使用过 ...

  7. 云计算 码率适配限速_一种基于云计算的应用于用户终端的测速方法

    一种基于云计算的应用于用户终端的测速方法 [专利摘要]本发明提供一种基于云计算的应用于用户终端的测速方法,包括:建立测速机制,定义相关参数,测速方法,输出测速结果:具体包括:建立测速机制,定义相关参数 ...

  8. 属性与意图识别_一种基于多任务学习的意图与槽位联合识别方法与流程

    本发明属于人机交互领域,涉及自然语言处理.垂直对话系统等,特别涉及一种基于多任务学习的意图与槽位联合识别方法. 背景技术: 意图识别和槽位识别可以将垂直对话系统中用户输入文本转化为语义表示,为系统采取 ...

  9. 时差 频差 双星定位 matlab,一种基于双星时差频差无源定位的伪距差分方法

    一种基于双星时差频差无源定位的伪距差分方法 [专利摘要]本发明提供了一种基于双星时差频差无源定位的伪距差分方法,依次测量两颗卫星到参考站的伪距差,计算卫星的伪距改正数,利用伪距改正数改正未知辐射源的伪 ...

  10. 时间窗口算法用matlab,一种基于动态规划算法的时间窗口相关的参与者选择方法与流程...

    本发明涉及一种移动群智感知中时间窗口相关的参与者选择方法,特别地,涉及一种基于动态规划算法的时间窗口相关的参与者选择方法. 背景技术: 在移动群智感知网络中,智能设备中嵌入了麦克风.相机.温度传感器. ...

最新文章

  1. php实现最大公约数,php求最大公约数
  2. Python中提示:no module named 'PIL'
  3. 1030 完美数列 (25 分)二分
  4. 词频统计的java实现方法——第一次改进
  5. tar 命令详解 / xz 命令
  6. linux常见文件打开,Linux常用操作有哪些? Linux常用操作介绍
  7. 软考信息系统项目管理师_体系介绍_证书作用价值_报考条件_考生分析---软考高级之信息系统项目管理师001
  8. Oracle 分页查询
  9. 16华为网络技术大赛模拟题答案详解
  10. 证券计算机行业研究,首创证券-计算机行业深度报告:物联网,研究框架-行业分析-慧博研究报告资讯...
  11. 文件内容批量简体转换繁体
  12. 个人GIT服务器搭建Windows/Linux
  13. 【Python】Talk Python To Me Podcast播客
  14. 什么是路由器 路由器和路由器之间怎么连接
  15. 什么是pisa测试_PISA测试是什么?
  16. php ci CodeIgniter框架图片缩略图处理类优化 缩放到固定大小
  17. 故事版xib --view上添加tableview
  18. 【统计学】参数估计、点估计、区间估计、置信区间
  19. 小米手机风筝守护显示服务器异常,风筝守护只能小米用吗
  20. 六度空间 (bfs,广度优先)

热门文章

  1. linux天气软件,桌面天气插件 Gis Weather 0.7.9
  2. 基于51单片机与wifi模块(esp8266-12f)实现对LED灯的控制
  3. VSC为_LCC 和 VSC (MMC) 的底层特性区别
  4. 在微型计算机汉字系统中一个汉字机内码,一个汉字的机内码在计算机中用2个字节表示。...
  5. springboot网上订餐管理系统设计与实现.rar(项目源码)
  6. 谁说菜鸟不会数据分析python mobi_利用Python进行数据分析[azw3+epub+mobi][30.34MB]
  7. 大一c语言基础试题及答案,大一大学计算机基础期末考试试题「附答案」
  8. 白话区块链 之 12 - 未花费事务输出 (UTXO) 是什么?
  9. 嵌入式linux交叉开发环境,构建嵌入式Linux交叉开发环境
  10. Hadoop fs shell命令汇总