I just spent part of today refactoring the ANTLR 3 templates (those common to
Yggdrasil) to see what progress could be made quickly in reducing the size of
generated code. I got 15% reduction by
1.) Adding noViableAlt() and other error routines that just throw exceptions
(or return if backtracking) to BaseRecognizer.java and removed the inline code
from the templates. noViableAlt() alone accounted for a 3% reduction.
2.) Moved the pushFollow() and fsp-- into parser rules. That saved less than
I would have thought.
3.) moved the s = -1 statements in the DFA specialStateTransition code outside
the case statement (via _s = s; s = -1; switch (_s)
4.) factored out the input stream manipulation sequences (within single cases)
into DFA methods.
This is the tip of the iceberg: excluding comment compaction (which should
remove 30-40 % of the line count) and specialization of the base recognizer
classes, I think that there is another 20-30% gain to be had. It would be a
good idea to examine the various runtimes and see what savings can be easily
achieved.
--Loring
_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org:8080/mailman/listinfo/antlr-dev