Saturday, April 05, 2008

antlr is (not) broken (alias code too large)

After 2 hours of debugging this issue down, I've found out, that antlr is probably broken on too fast machines. My E6850 core 2 duo (3GHz) with antlr 3.0.1 generates simply too huge code, so that java can't compile it. (I don't hit the problems on same software configurations with different hardware – my notebook with core 2 duo neither another desktop AMD 64 dual core 4200+.)

If I run 2 this suckers:
cat /dev/zero > /dev/null &

and antlr under nice (nice java -cp ... org.antlr.Tool My.g) priority just for sure, it just gives out totally different code, shorter for about 15000 lines (diff). There must be some uglymoronic race.

EDIT: Ok, according to Terrence Parr (the antlr leader), it's not a bug from his point of view, see his comments below.

The trick is -Xconversiontimeout 600 on my machine.


parrt said...

ANTLR is single-threaded. Weird.

parrt said...

Oh. i know. There is a failsafe timeout when things get too "hard" to figure out statically. ANTLR can handle bigger grammars with a bigger machine. So...ANTLR is not broken.

September said...

Well written article.

Anonymous said...

All not so is simple