Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析Java源代码

解析Java源代码
EN

Stack Overflow用户
提问于 2011-03-31 00:39:52
回答 9查看 6.7K关注 0票数 9

我被要求开发一个软件,它应该能够创建输入Java源代码的流程图/控制流。因此,我开始研究它,并得出了以下解决方案:

要创建流程图/控制流,我必须识别给定源代码中的控制语句和函数调用,现在我有两种识别方法:

  1. 通过编写我自己的语法来解析源代码(我认为这是一个复杂的解决方案)。我想用Antlr来做这件事。
  2. 将输入的源代码文件作为文本读取并搜索特定的模式(可能会变得效率低下)

我就在这儿吗?还是我错过了一些非常基本和简单的东西?哪种方法会花费更少的时间并有效地完成工作?这方面的任何其他建议也将受到欢迎。任何其他有效的方法都会有所帮助,因为输入源代码可能跨越多个文件,而且可能相当复杂。

我擅长.NET语言,但这是我在Java中的第一个大型项目。我有编译设计的基本知识,所以写语法对我来说不是不可能的。

抱歉,如果我不清楚。请作出任何澄清。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-03-31 00:46:58

票数 7
EN

Stack Overflow用户

发布于 2011-03-31 02:09:12

所有处理Java代码的工具通常首先决定是否要处理Java或Java字节代码文件。这是一个战略决策,取决于您的用例。我可以为流程图的生成而把两者都想象出来。当你决定这个问题的时候。已经有几个框架或库,可以在这方面对您有所帮助。对于字节码工程,有:ASMJavaAssist煤烟BCEL,它们似乎已经死了。对于Java语言的解析和分析,有:多角化、eclipse编译器和javac。所有这些都包括一个完整的Java编译器前端,并且都是开源的。

我会尽量避免为Java编写自己的解析器。我做过一次。Java有一个相当复杂的语法,但它可以在其他地方找到。真正的工作从名称和类型解析开始。如果您想要生成涵盖多个方法体的图,则两者都需要。

票数 4
EN

Stack Overflow用户

发布于 2012-04-02 18:46:38

Eclipse有一个库,用于解析源代码并从源代码中创建抽象语法树,这将使您可以提取所需的内容。

有关教程http://www.vogella.de/articles/EclipseJDT/article.html,请参阅此处

有关api 描述,请参阅此处

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5497210

复制
相关文章
程序化的事件侦听器
也就是说,在其中一个页面中我们使用uni.on或者uni.once,在另一个页面中就可以使用uni.emit进行调用,前提是uni,on或者uni.
阿超
2022/08/17
1.4K0
程序化的事件侦听器
当提到“事件驱动”时,我们在说什么?
去年年底(2016年底),我和ThoughtWorks同事一起参加了一个研讨会,讨论“事件驱动”的本质。在过去的几年里,我们构建的很多系统都大量使用了事件。对于这些系统,人们常常赞誉有加,但批评的声音也不绝于耳。我们的北美办公室组织了一次峰会,来自世界各地的ThoughtWorks资深开发者出席会议并分享了他们的想法。
ThoughtWorks
2019/05/05
5200
当提到“事件驱动”时,我们在说什么?
【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入代码示例 )
Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ;
韩曙亮
2023/03/29
3410
【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入代码示例 )
【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )
Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ;
韩曙亮
2023/03/29
1.8K0
【IOC 控制反转】Android 事件依赖注入 ( 事件三要素 | 修饰注解的注解 | 事件依赖注入步骤 )
Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ;
韩曙亮
2023/03/29
9090
vue的事件总线是公用的吗?使用事件总线有哪些优点?
在不同的应用程序中含有非常丰富的组件,这些组件共同了正常运行的应用程序组件之间也有相互的联系,有些组件是父子组件,有些组件是兄弟组件,这些组件都需要进行通信的。那么vue的事件总线是公用的吗?下面为大家简单介绍vue的事件总线是公用的吗。
用户8715145
2022/03/07
6450
js也可以有自定义事件 注入就是这么爽
  在c#中有delegate,还有特殊的可以直接应用于事件编程的delegate,那就是event。而在js中没有c#的event,更没有delegate,有的只是dom元素内置的的native的不可扩展的event,比如无法为input元素添加事件,只能在其拥有的事件(如onclick=handler)上扩展应用。那么能不能做到自定义的事件模拟效果呢?答案是肯定的,也就是本文的主题。   首先弄明白一下事件的意图——可以在发生一件事的时候执行额外的代码,如document.attachEvent('on
用户1183026
2018/01/18
9550
IOC架构实现布局、事件注入
通过反射获取ContentView注解,并最终调用Activity的setContentView方法
aruba
2021/12/06
5430
IOC架构实现布局、事件注入
使用eventBus事件的重复触发事件问题的解决
在单页应用中,在 A 页面中触发事件,然后在 B 页面中对这个事件进行响应是一个很常见的需求,那么当有这种需求的时候要怎么实现呢。有两种方案可以实现:
用户2305169
2018/07/24
3.8K0
jQuery 双击事件(dblclick)时,不触发单击事件(click)
在jQuery的事件绑定中,执行双击事件(dblclick)时能触发两次单击事件(click)。即一个标签元素(如div等),如果元素同时绑定了单击事件(click)和双击事件(dblclick),那么执行单击事件(click)时,不会触发双击事件(dblclick), 执行双击事件(dblclick)时却会触发两次单击事件(click)。 先看一下点击事件的执行顺序:
飞奔去旅行
2019/06/13
5.7K0
【春节日更】写一个通用的事件侦听器函数
今日分享,面试题一道: 写一个通用的事件侦听器函数(机试题) 本题不难,主要是要能理解,它想考你的是什么? 此题主要考你:事件不同操作的兼容写法 具体实现,可以参考下面代码的实现思路
用户9914333
2022/07/22
5380
自己实现事件总线-EventBus事件总线的使用
在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类。这对于桌面应用或者独立的windows服务来说是非常有用的。但对于一个web应用来说是有点问题的,因为对象都是在web请求中创建的,而且这些对象生命周期都很短,因而注册某些类的事件是很困难的。此外,注册其他类的事件会使得类紧耦合。事件总线便可以用来解耦并重复利用应用中的逻辑。
架构师精进
2018/08/27
1.6K0
自己实现事件总线-EventBus事件总线的使用
jQuery 事件(三) 事件的绑定和解绑、对象的使用、自定义事件
之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理。翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个”on”方法来实现的。jQuery on()方法是官方推荐的绑定事件的一个方法 基本用法:.on( events ,[ selector ] ,[ data ] ) 最常见的给元素绑定一个点击事件,对比一下快捷方式与on方式的不同
Yiiven
2022/12/15
4.2K0
事件总线的原理是什么?事件总线如何使用?
我们都知道在vue组件中有很多通信方式,例如我们都熟知和常见的父子组件通信和兄弟组件通信。在其中还有一种功能非常强大的通信方式,可以做到跨组件通信,那就是事件总线。事件总线的原理是什么呢?下文将会有一个详细的介绍,请阅读下文。
用户8715145
2022/03/18
1.2K0
详解 Solidity 事件Event - 完全搞懂事件的使用
很多同学对Solidity 中的Event有疑问,这篇文章就来详细的看看Solidity 中Event到底有什么用?
Tiny熊
2018/07/23
2.1K0
事件流、事件捕获和事件冒泡的介绍
我们在点击页面时,事件发生时会在各元素节点按照一定的顺序进行传播,这种传播过程就称作事件流。
伯约同学
2022/02/18
1.3K0
双击事件(dblclick)时,不触发鼠标按下(mousedown) 动作事件
在一个dom节点的事件绑定中,如果同时绑定了dblclick和mousedown那么想要执行双击事件(dblclick)时能就会触发两次mousedown事件。
李维亮
2023/10/23
9380
双击事件(dblclick)时,不触发鼠标按下(mousedown) 动作事件
事件总线指的是什么?事件总线如何使用?
比较常见的组件通信方式有父子组件通信和兄弟组件通信,两个组件是有着引入和被引入关系。如果两者之间没有任何引入关系,就可以使用事件总线来达到通信的目的。到底事件总线指的是什么?我们将在下文做一个介绍。
用户8715145
2022/03/18
1.1K0
liteavsdk的推流事件和播放事件的事件码
推流和播放的事件码我们通常通过这个来判断当前的流的状态 推流事件列表 code TXLiveSDKEventDef常量 含义说明 1001 PUSH_EVT_CONNECT_SUCC 已经连接推流服务器 1002 PUSH_EVT_PUSH_BEGIN 已经与服务器握手完毕,开始推流 1003 PUSH_EVT_OPEN_CAMERA_SUCC 打开摄像头成功 1005 PUSH_EVT_CHANGE_RESOLUTION 推流动态调整分辨率 1006 PUSH_EVT_CHANGE_BITRATE 推流动
腾讯云-qichengdeng
2019/09/12
2.4K0
浅谈JavaScript的事件(事件对象)
  在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有关的信息。包括导致事件的元素、事件的类型和事件的相关信息。例如鼠标操作的事件中,会包含鼠标的位置信息。而键盘触发的事件会包含与按下的键有关信息。所有浏览器都支持event对象,但支持方式不同。 DOM中的事件对象   兼容dom的浏览会将一个event对象传递到事件处理程序中。 1 var aa=document.getElementById("aa"); 2 aa.onclick=functi
水击三千
2018/02/27
1.3K0

相似问题

JPA事件侦听器

118

JPA实体事件侦听器

15

当使用事件侦听器时,knockout不绑定吗?

10

空事件侦听器:可以吗?

14

可以使用PHP添加事件侦听器吗?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档