java cfg_如何使用antlr生成Java CFG(控制流图)?
AFAIK,ANTLR在构建控制流图时没有提供任何具体帮助.
您可以通过遍历AST自己构建一个,并收集操作(无条件语句)和条件(表达式节点控制条件)的知识,并根据该信息组合图形.请注意,switch语句是一种复合条件,需要作为一组决策或特殊的N路条件处理.
异常处理可能会改变您所认为的“无条件行为”;每个方法调用都有可能将控制流重定向到异常处理程序(或函数的退出),您需要决定是否要在控制流图中包含这些.如果您想了解程序的功能(特别是数据流),您需要对这些进行建模.
您将需要创建控制流节点(只是一种类),它可以引用AST的各个部分(“这是动作”)和其他两个控制流节点(以处理if-then-else);这些出口中的这些出口为“真正退出”和“错误退出”,或者“继续”和“陷阱”出口.这个子类将代表纯计算,IF语句,TRY块等.
Java是一个纯粹的“结构化”语言,这意味着您可以“自下而上”构建控制流图;您可以在向上遍历叶子时构建控制流图的位,并在爬树时组合来自子项的控制流图.您需要做的是将一个如此远的组装控制流图(最初在叶子处为空)传递到树上,并引用该图中要将控制传递给异常处理程序的控制流节点列表.然后在爬树时,扩展控制流图.
大多数工作都是在条件下进行的,例如IF-THEN-ELSE节点;在这种情况下,将两个具有两组异常的控制流子图传递给该节点.然后创建一个控制流节点来表示条件,将其动作设置为指向条件表达式,将其两个子节点设置为指向传入的两个子图,并将其异常集设置为异常集的并集.
子例程调用获取流动节点,其动作是方法调用,退出到以下语句/子表达式,另一个退出(未填充)最终将指向catch子句.将子例程调用节点添加到传递的异常列表中.
尽管他们没有“下一步”行动,但同样对待THROW法则.
遇到TRY构造时,生成一个条件节点,其动作指向try主体,一个退出指向try的结束或者指向finally子例程调用.最后,修补例外列表中的所有控制流节点以指向catch子句.
您需要将catch子句链接在一起作为if语句的序列.
您必须将“finally”视为从try子句调用的子例程调用以及各种catch子句.
java cfg_如何使用antlr生成Java CFG(控制流图)?相关推荐
- aidl生成java文件_Android AIDL自动生成Java文件测试
/******************************************************************************** * Android AIDL自动生成 ...
- java castor_利用Castor自动生成java文件
1.编写schema文件,例如:c:\castor\test.xsd. 2.到http://www.castor.org/网站下载castor-xml.jar(本文使用的是0.9.4版本)及编译所要引 ...
- java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
项目简介 Data-Factory 用于根据对象,随机自动生成初始化信息,避免了手动创建对象的繁琐,便于测试. 特性 8 大基本类型的支持 String.Date.金额,日期等常见类型的支持 java ...
- java java.doc_使用 javadoc 自动生成 Java 文档
Java 的注释,单行,多行的语法就不在赘述了. javadoc tags 给 Java 源码文件书写注释,使用常见的 Java 注释可以实现一些,也可以通过如下的 Javadoc 的 Tags 来实 ...
- antlr java_使用ANTLR和Java创建外部DSL
antlr java 在我以前的文章中,有一段时间我写了关于使用Java的内部DSL的文章. 在Martin Fowler撰写的< 领域特定语言 >一书中,他讨论了另一种称为外部DSL的D ...
- 使用ANTLR和Java创建外部DSL
在以前的一段时间里,我曾写过有关使用Java的内部DSL的文章. 在Martin Fowler撰写的< 领域特定语言 >一书中,他讨论了另一种称为外部DSL的DSL,其中DSL是用另一种语 ...
- java soot_Soot生成控制流图
Soot是McGill大学的Sable研究小组自1996年开始开发的Java字节码分析工具,它提供了多种字节码分析和变换功能,通过它可以进行过程内和过程间的分析优化,以及程序流图的生成,还能通过图形化 ...
- dtd文件生成java类
最近需要用dtd文件生成对应的Java类,其中xsd生成Java类之前已经说过了 其中 C:\Users\Administrator>xjc -dtd D:\eclipse_wks\IDS_ ...
- angr原理与实践(二)—— 各类图的生成(CFG CG ACFG DDG等)
本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 上一篇文章介绍了angr的原理,自此篇文章开始,将从一 ...
最新文章
- Github 3.4k星,200余行代码,让你实时从视频中隐身
- 本地复制不能粘贴到服务上
- Projects(子查询、连接,分组,聚合)
- DataSet转化为DataTable
- Linux 服务器高级编程ET LT代码
- 抖音api开放平台对接_抖音新增酒店预订等功能,一只脚踏进美团、携程腹地
- 卧槽!二维码要被扫完了吗?疫情期间竟用掉了1400亿个!
- MAC编译OpenJDK8:iostream file not found(独家解决办法)
- winform 实现qq代理_「设计模式」代理模式:神奇的代理模式,节省了我80%开发时间...
- linux 串口监视工具_监视Linux的最佳工具
- QT资源库中图片的调用
- FYI|OHBM BrainArt Competition DDL: June06/2021
- TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head forObject Detection on Drone-captur
- 焦虑症应该怎么办?这六个缓解方法建议试试
- 在线客服——各第三方的收费标准及服务提供
- 比较全面的安全测试用例设计思路
- javascript编码调试环境-ide和调试工具
- gif一键抠图 在线_5个一键抠图高效率工具
- Hadoop 百度百科
- Java 实现QQ聊天室
热门文章
- vue页面跳转数据传递
- 大数据学习笔记55:搭建HBase环境
- Java案例:两个线程交替执行
- 二级VB培训笔记08:公共基础知识
- PHP案例:实现登录功能
- 沪教版神奇的机器人分段_神奇的机器人课文教学设计
- 【Level 08】U06 Good Feeling L3 Fun-filled concert
- 【英语学习】【Level 08】U03 My Choice L2 All-time favorite character
- Intel 64/x86_64/x86/IA-32处理器串行化指令(2) - 参考
- python table_用python解析word文件(二):table