2012-02-14 57 views
2

我正在编写Java到Java Bytecode编译器,编译为Jasmin代码,并将其组装到一起。我创建它的目的是源代码文件将能够引用和使用Java库类(你几乎必须为字符串,打印等)。我的问题是如何去做这件事。Java到Java Bytecode编译器:如何获取Java类库信息?

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

现在真的是一个问题,我正在研究代码生成,因为如果你想调用一个库类的方法,你必须给它提供完整的方法签名 - 这是我无法访问的。

我在徘徊什么人的建议将如何进步。一种方法是通过创建所有参数和返回类型的数据库/列表的所有类。这显然非常耗时,并且可能太不切实际。还有其他更优雅的方法吗?

感谢, 威尔

附:我使用Python来编码。我想如果解决方案必须使用Java代码,我可以将它作为一个子进程运行。

回答

0

通过进一步观察,似乎可能通过使用Java反射。我会回复这个帖子,让你知道我有多成功。

+0

是的,我最终选择了这个选项。我写了一个Java程序,它使用方法/字段等名称并返回它们所属的类(如果它们存在的话)。 Java Refletion API都是可能的。 – 2012-03-28 14:16:35

0

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

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

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

+0

我的主要目标是为Java语言的子集添加一些额外的功能。 我想我可以创建所有方法列表然后。那么我现在可能只包含基本库包中的类。 – 2012-02-16 13:21:56