问题
I would like to write a compiler for a toy-language for Java. I would like to generate runnable .class files. I was wondering what is the best library or tool available for doing this? I know I could learn the binary format for all the instructions and build my own constant pool etc, but that seems like work that ought to have been already done: no point reinventing the wheel, right?
Searching online I've found two different Java Assembly languages, Jasmin and Jamaica, however only Jasmin looks somewhat maintained.
Is there a Java library for writing byte codes to a stream? Is this what the Apache BCEL is?
Is their a tool for this that is the "standard" for byte-code generation, like Antlr is for parsing?
PS- The toy language is Brainf***, I wanted something where I could have a simple "grammar" so I could focus on the generation aspect and not the parsing part... that will come later on the next step.
回答1:
ASM and BCEL do basically similar things. I'd recommend ASM as it's much more supported, much smaller, and is up to date JDK-wise.
回答2:
It sounds like you're looking for Apache BCEL:
The Byte Code Engineering Library (Apache Commons BCEL™) is intended to give users a convenient way to analyze, create, and manipulate (binary) Java class files (those ending with .class).
来源:https://stackoverflow.com/questions/8195507/how-to-programmatically-generate-class-files