Janino is a compiler that reads a JavaTM expression, block, class body, source file or a set of source files, and generates JavaTM bytecode that is loaded and executed directly.
Polyglot is a highly extensible compiler front end for the Java programming language. It is implemented as a Java class framework using design patterns to promote extensibility. Using Polyglot, language extensions can be implemented without duplicating code from the framework itself. Polyglot has been used to implement domain-specific languages, to explore language design ideas, to simplify Java for pedagogical purposes, and for various code transformations such as optimization and fault injection.
ObjectTeams is a light extension to Java that provides support for advanced modularization. Role based programming provides the means to separate concerns, while features of aspect orientation provide a powerful adaptation/extension facility. An OpenSource, Eclipse-based IDE (currently based on Eclipse 3.2) supports designing, editing, refactoring, compiling, executing and debugging. Object Teams programs run on a standard Java VM.
Saffron is an extension to Java to incorporate SQL-like relational expressions. It features a pre-processor, a query optimizer, and a runtime library.
JastAdd is an open source Java-based compiler compiler system. It is designed to support high-level extensible implementation of compilers and related tools like analyzers, transformation tools, etc. The JastAdd Extensible Java Compiler provides both a proof-of-concept that JastAdd can be used for large substantial projects, lika a complete Java compiler. It also illustrates extensibility and modularity in showing how different tools and language extensions can be implemented as extensions to other components..
InstantJ is a library you can use to compile and execute Java code or evaluate expressions written in Java. This is done on the fly – there is no pre-compiling step necessary. This is ideal in cases where expressions are either assembled programmatically at runtime, are read from descriptors or received from user-input.