我正在通过编译为 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/