compiler-construction - Java 到 Java 字节码编译器 : How Do I Get Java Class Library Information?

标签 compiler-construction java-bytecode-asm java jasmin

我正在通过编译为 Jasmin 编写 Java 到 Java 字节码编译器代码,并组装它。我创建它的目的是让源代码文件能够引用和使用 Java 库类(对于字符串、打印等,您几乎必须这样做)。我的问题是具体如何去做。

到目前为止,我一直在使用对所有库类列表的引用,该列表保存在 Java 安装文件夹中的一个文本文件中(它只列出了它们的包和名称)。我在编写解析器/类型检查器时使用了它,尽管这不太理想,因为在使用库类时类型检查器无法进行任何类型检查。

现在我正在处理代码生成,这确实是一个问题,因为如果你想调用库类的方法,你必须给它完整的方法签名——这是我无权访问的。

我在徘徊人们对如何进步的建议。一种方法是遍历所有类,创建一个包含所有参数和返回类型的数据库/列表。这显然会非常耗时,而且可能太不现实了。还有其他更优雅的方法吗?

谢谢, 将

附言我正在使用 Python 对此进行编码。我想如果解决方案必须使用 Java 代码,我可以将它作为子进程运行。

最佳答案

您知道,已经有一个 Java 到字节码的编译器。还有一个 JVM Python。你的实际目标是什么?

是什么让您认为创建方法/返回类型的集合“非常耗时”? “极度”耗时多少?这就是它在现实生活中的工作方式,即使使用 javap,从类文件中提取该信息也不是特别耗时。除此之外,还有 ASM、BCEL 和其他一些库可以直接从 .class 文件中提取信息,但是 javap 提供简单的文本输出并且可能足以满足您的需求。

为了使用符号,你需要一个符号表。获取可用内容的唯一方法是存储可用内容。它比您想象的更快、更小,尤其是当您使用速记符号时。

关于compiler-construction - Java 到 Java 字节码编译器 : How Do I Get Java Class Library Information?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283787/

相关文章:

c++ - 编译器不会提示函数没有返回值

使用 ASM 的 Java 字节码检测,MethodVisitor 为 null

java - payara micro 5.182 不部署用 java10 编译的 Web 应用程序

java - 出现检查的正则表达式问题 :

c - 从命令行使用 lcc-win 编译器

c - 如何制作函数式语言编译器

java - 从启动的线程中收集返回值? [最新Java]

java - 如何获取 leftNavLibrary?

c - c编译器和c标准库的关系

java - 使用 ASM Java 库拆箱