解析Java源代码

2023-11-27

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

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

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

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

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

抱歉,如果我不清楚。请询问任何澄清。


我会和Antlr并使用现有的 Java 语法:https://github.com/antlr/grammars-v4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析Java源代码 的相关文章

随机推荐

  • 糟糕的 DotNetNuke 性能

    我参与了一个项目 使用DotNetNuke 版本 05 01 04 社区版 我们正在使用它构建新的 Intranet 但性能很糟糕 我们有五个人向其添加页面和内容 每 15 30 秒一次他们经历了 10 秒的停顿或在系统继续并加载下一个屏幕
  • libgmalloc 如何与二级命名空间一起工作?

    我想编写自己的 malloc free 函数以进行调试 文档说我必须将 DYLD FORCE FLAT NAMESPACE 与 DYLD INSERT LIBRARIES 一起使用 但同时libgmalloc文章明确指出 libgmallo
  • 在应用程序启动时从故事板中选择替代的第一个视图控制器

    我刚刚开始 iOS 编程 到目前为止 我在这里找到的教程和答案对我的前进有很大帮助 然而 这个特殊的问题整夜困扰着我 我找不到 感觉正确 的答案 我正在编写一个连接到远程服务的应用程序 用户需要登录才能使用它 当他们开始使用应用程序时 他们
  • 如何在 read() 函数调用中实现超时?

    我想使用串行com端口进行通信 并且我想在每次调用时实现超时read 函数调用 int filedesc open dev ttyS0 O RDWR read filedesc buff len EDIT 我使用的是 Linux 操作系统
  • MATLAB:如何在 parfor 中设置随机种子以产生与 Serial for 相同的结果?

    我设置了以下最小示例 rng 0 randseedoffset random unid 10 5 1 t cell 10 1 for i 1 10 rng randseedoffset i t i random unid 1000 end
  • XML::LibXML 中实现了哪个版本的 XPath?

    有谁知道 XML LibMXL 中实现了哪个版本的 XPath 规范 或者更重要的是 在哪里可以找到可在 LibXML 中使用的 XPath 函数的描述 例如 我尝试过类似的东西 dcDOM gt findvalue dc identifi
  • C 有标准的 ABI 吗?

    来自讨论别的地方 C 没有标准的ABI 应用程序二进制接口 但C也没有 对吗 在任何给定的平台上它几乎都是如此 如果缺乏一种语言 它就无法作为跨语言交流的通用语言 您对此有何看法 C 没有定义 ABI 事实上 它竭尽全力避免定义 ABI 像
  • 如何在sklearn中对分类变量进行编码?

    我正在尝试使用 UCI 存储库中的汽车评估数据集 我想知道是否有一种便捷的方法可以在 sklearn 中对分类变量进行二值化 一种方法是使用 LabelBinarizer 的 DictVectorizer 但在这里我得到了 k 个不同的特征
  • 使用 HBase 进行行分页

    有没有办法在HBase中基于rowkey进行分页 我想要和我一样的效果SQL with SELECT FROM table LIMIT 10 OFFSET 10 如果这是不可能的 我应该如何最好地设计我的行键以进行适当的查询 您可以利用页面
  • 重新分配一次性对象变量是如何工作的?

    在 C 中 当用新对象重新分配一次性对象变量时 它在内存中如何工作 旧对象占用的内存空间会被新对象覆盖吗 或者我还需要打电话吗Dispose 释放它使用的资源 DisposableThing thing thing new Disposab
  • LINQ to Entities Union 引发错误

    我已经成功地完成了以下工作 var transactions from t in context Transactions group t Create Date Time by t Participation Id into t1 sel
  • 如何将类型应用于 NSFetchRequest 实例?

    在 Swift 2 中 以下代码有效 let request NSFetchRequest entityName String 但在 Swift 3 中它给出了错误 无法推断通用参数 ResultType because NSFetchRe
  • 具有默认参数的成员函数指针

    我正在尝试创建一个指向具有默认参数的成员函数的指针 当我通过此函数指针调用时 我不想为默认参数指定参数 根据标准 这是不允许的 但我以前从未发现过任何标准不允许的事情 而我却无法以其他符合标准的方式做到这一点 到目前为止 我还没有找到一种方
  • R 中的简单 if-else 循环

    有人能告诉我 R 中的 if else 循环有什么问题吗 我经常无法让 if else 循环工作 我收到错误 if match SubjResponse names data NA observed lt data SubjResponse
  • 在 C# 中将 4 字节数组转换为浮点数时出现问题

    我正在使用 C 并从某个控制器读取字节数组并将它们转换为其类型 除浮点值外 所有值 int string 都可以 假设得到的值为 533174 1 但是当读取数组时 byteArr 0 2 byteArr 1 73 byteArr 2 98
  • lambda 是否会在内存中保留任何数据?

    我在 AWS lambda 中有以下代码 const cache exports handler async event gt TODO implement if cache event key console log read from
  • 为什么这有效? (在C++中查找奇数)

    for unsigned int i 1 i lt 100 i if i 0x00000001 std cout lt lt i lt lt 为什么 以及如何 if i 0x00000001 找出奇数 0x00000001 is 1尽管它是
  • 无法加载 AppCompat ActionBar,出现未知错误?

    构建 gradle 文件 apply plugin com android application android compileSdkVersion 28 defaultConfig applicationId io dume dume
  • 在 PostgreSQL 中动态生成交叉表列

    我正在尝试创建crosstabPostgreSQL 中的查询 使其自动生成crosstab列而不是对其进行硬编码 我编写了一个函数 可以动态生成我需要的列列表crosstab询问 这个想法是将这个函数的结果替换为crosstab使用动态sq
  • 解析Java源代码

    我被要求开发一个软件 它应该能够创建输入Java源代码的流程图 控制流 于是我开始研究并得出以下解决方案 要创建流程图 控制流 我必须识别给定源代码中的控制语句和函数调用现在我有两种识别方法 通过编写我自己的语法来解析源代码 我认为这是一个