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(控制流图)?相关推荐

  1. aidl生成java文件_Android AIDL自动生成Java文件测试

    /******************************************************************************** * Android AIDL自动生成 ...

  2. java castor_利用Castor自动生成java文件

    1.编写schema文件,例如:c:\castor\test.xsd. 2.到http://www.castor.org/网站下载castor-xml.jar(本文使用的是0.9.4版本)及编译所要引 ...

  3. java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程

    项目简介 Data-Factory 用于根据对象,随机自动生成初始化信息,避免了手动创建对象的繁琐,便于测试. 特性 8 大基本类型的支持 String.Date.金额,日期等常见类型的支持 java ...

  4. java java.doc_使用 javadoc 自动生成 Java 文档

    Java 的注释,单行,多行的语法就不在赘述了. javadoc tags 给 Java 源码文件书写注释,使用常见的 Java 注释可以实现一些,也可以通过如下的 Javadoc 的 Tags 来实 ...

  5. antlr java_使用ANTLR和Java创建外部DSL

    antlr java 在我以前的文章中,有一段时间我写了关于使用Java的内部DSL的文章. 在Martin Fowler撰写的< 领域特定语言 >一书中,他讨论了另一种称为外部DSL的D ...

  6. 使用ANTLR和Java创建外部DSL

    在以前的一段时间里,我曾写过有关使用Java的内部DSL的文章. 在Martin Fowler撰写的< 领域特定语言 >一书中,他讨论了另一种称为外部DSL的DSL,其中DSL是用另一种语 ...

  7. java soot_Soot生成控制流图

    Soot是McGill大学的Sable研究小组自1996年开始开发的Java字节码分析工具,它提供了多种字节码分析和变换功能,通过它可以进行过程内和过程间的分析优化,以及程序流图的生成,还能通过图形化 ...

  8. dtd文件生成java类

    最近需要用dtd文件生成对应的Java类,其中xsd生成Java类之前已经说过了 其中 C:\Users\Administrator>xjc  -dtd  D:\eclipse_wks\IDS_ ...

  9. angr原理与实践(二)—— 各类图的生成(CFG CG ACFG DDG等)

    本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 上一篇文章介绍了angr的原理,自此篇文章开始,将从一 ...

最新文章

  1. Github 3.4k星,200余行代码,让你实时从视频中隐身
  2. 本地复制不能粘贴到服务上
  3. Projects(子查询、连接,分组,聚合)
  4. DataSet转化为DataTable
  5. Linux 服务器高级编程ET LT代码
  6. 抖音api开放平台对接_抖音新增酒店预订等功能,一只脚踏进美团、携程腹地
  7. 卧槽!二维码要被扫完了吗?疫情期间竟用掉了1400亿个!
  8. MAC编译OpenJDK8:iostream file not found(独家解决办法)
  9. winform 实现qq代理_「设计模式」代理模式:神奇的代理模式,节省了我80%开发时间...
  10. linux 串口监视工具_监视Linux的最佳工具
  11. QT资源库中图片的调用
  12. FYI|OHBM BrainArt Competition DDL: June06/2021
  13. TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head forObject Detection on Drone-captur
  14. 焦虑症应该怎么办?这六个缓解方法建议试试
  15. 在线客服——各第三方的收费标准及服务提供
  16. 比较全面的安全测试用例设计思路
  17. javascript编码调试环境-ide和调试工具
  18. gif一键抠图 在线_5个一键抠图高效率工具
  19. Hadoop 百度百科
  20. Java 实现QQ聊天室

热门文章

  1. vue页面跳转数据传递
  2. 大数据学习笔记55:搭建HBase环境
  3. Java案例:两个线程交替执行
  4. 二级VB培训笔记08:公共基础知识
  5. PHP案例:实现登录功能
  6. 沪教版神奇的机器人分段_神奇的机器人课文教学设计
  7. 【Level 08】U06 Good Feeling L3 Fun-filled concert
  8. 【英语学习】【Level 08】U03 My Choice L2 All-time favorite character
  9. Intel 64/x86_64/x86/IA-32处理器串行化指令(2) - 参考
  10. python table_用python解析word文件(二):table