JBurg3 is extended form of the algorithm outlined in Dr. Todd Proebsting's 1992 paper, Simple and Efficient BURS Table Generation. JBurg3 extends Proebsting's BURG's capabilities in several respects which have proven valuable in practice:
- The pattern matching productions accept arbitrary numbers of children, both fixed arity and variadic.
- Specialized "pattern matching" rules to handle null nodes.
- Pattern matching rules can be guarded by semantic predicates.
- Nonterminal-to-nonterminal rules can execute reduction actions.
- Error handling rules.
JBurg3 shares most of these capabilities with JBurg2, which uses an "iburg" type algorithm that generates rewrite machines that defer dynamic programming to compile time. JBurg3, however, does its dynamic programming at compiler compile time. JBurg3 can generate its tables at compiler-compile time and serialize the tables into an XML or host language source file.
JBurg3 differs from most other BURGs in that it does not have a specification language; the benefits of a bespoke language have, in many deployment scenarios, been outweighed by the overhead of educating developers in the tool and integrating the tool into build processes.
The author also wishes to thank former employers who have supported the JBurg project:
- Allaire Corporation
- Macromedia
- Adobe Systems
- NuoDB
- Veracode