2

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

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

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

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

谢谢,威尔

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

4

2 回答 2

0

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

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

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

于 2012-02-14T20:58:00.000 回答
0

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

于 2012-02-26T22:29:34.460 回答