A bottom-up rewrite machine is a compiler construction tool that is often used in the compiler's back end to convert a tree-structured representation of a program into machine code -- or, in Java's case, bytecode.
JBurg can also be used as a general-purpose dynamic programming engine.
JBurg is descended from
iburg-class BURGs, described in
Fraser, Hanson, and Proebsting's paper,
"Engineering a Simple, Efficient Code Generator Generator."
JBurg brings similar O(N) minimum-cost tree rewriting capabilities to Java, and also allows the programmer to specify transitions between non-terminal states, that are significantly more powerful than iburg's transitive closures: JBurg transformation rules allow the transformation to inject additional program logic, which makes a JBurg specification more like a grammar than like a list of pattern-matching rules.