Compiler construction Java到Java字节码编译器:如何获取Java类库信息?

Compiler construction Java到Java字节码编译器:如何获取Java类库信息?,compiler-construction,java-bytecode-asm,java,jasmin,Compiler Construction,Java Bytecode Asm,Java,Jasmin,我正在编写一个Java-to-Java字节码编译器,方法是编译成代码,然后进行组装。我创建它的目的是使源代码文件能够引用和使用Java库类(对于字符串、打印等,您几乎必须这样做)。我的问题是如何准确地进行这项工作 到目前为止,我只是使用了一个对所有库类列表的引用,该列表保存在Java安装文件夹中的一个文本文件中(它只是列出了它们的包和名称)。我在编写解析器/类型检查器时使用了它,尽管这并不理想,因为在使用库类时,类型检查器无法执行任何类型检查 现在我正在进行代码生成,这确实是一个问题,因为如果要

我正在编写一个Java-to-Java字节码编译器,方法是编译成代码,然后进行组装。我创建它的目的是使源代码文件能够引用和使用Java库类(对于字符串、打印等,您几乎必须这样做)。我的问题是如何准确地进行这项工作

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

现在我正在进行代码生成,这确实是一个问题,因为如果要调用库类的方法,必须给它完整的方法签名——我没有访问权

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

谢谢, 意志


另外,我正在使用Python编写代码。我想如果解决方案必须使用Java代码,我可以将其作为子进程运行。

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

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


为了使用符号,您需要一个符号表。获取可用信息的唯一方法是存储可用信息。它比你想象的更快、更小,特别是如果你使用速记法。

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

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


为了使用符号,您需要一个符号表。获取可用信息的唯一方法是存储可用信息。它比您想象的更快、更小,特别是如果您使用速记符号。

通过进一步研究,似乎可以使用Java反射。我会回复这篇文章,让你知道我有多成功。

通过进一步研究,使用Java反射似乎是可能的。我会回复这篇文章,让你知道我有多成功。

我最终的目标是为Java语言的一个子集添加一些额外的功能。我想我可以创建所有方法的列表。现在我可能只包含基本库包中的类,我最终的目标是为Java语言的一个子集添加一些额外的特性。我想我可以创建所有方法的列表。我现在可能只包括基本库包中的类。是的,我最终选择了这个选项。我编写了一个小Java程序,它接受方法/字段等名称并返回它们所属的类(如果它们存在的话)。通过Java Refletion API,这一切都是可能的。是的,我最终选择了这个选项。我编写了一个小Java程序,它接受方法/字段等名称并返回它们所属的类(如果它们存在的话)。这一切都可以通过Java Refletion API实现。