[antlr-interest] Java, apps

Terence Parr parrt at jguru.com
Sun Oct 7 10:59:10 PDT 2001


On Saturday, October 6, 2001, at 09:56  PM, Robert Colquhoun wrote:

> At 12:00 PM 10/4/01 +0200, Ric Klaren wrote:
>> Hi,
>>
>> I didn't say thanks yet did I? Shame on me =)
>>
>> Thanks!!
>
> I was looking at the current classes used internally for bitsets in 
> antlr -
> the java BitSet class i wrote is going to need some additional methods 
> to
> replace the current implementation.
>
> I am not sure what to do here - from the eratosthenes sieve benchmark
> included shows only a marginal difference in performance(less than 10%)
> between antlr's current BitSet class,  the BitSet i wrote and the 
> standard
> java.util.BitSet.  It might be better long term for maintainability to 
> just
> use the standard java.util.BitSet plus some utility routines to feed in 
> the
> raw data(the long int arrays).  For C++ just write something(perhaps
> adapting my current code) to look like the equivalent java class.

Don't forget that ANTLR uses my bitset very heavily during grammar 
analysis.  I recall that the java.util.BitSet didn't do inline stuff or 
something which concerned/irritated me (memory/GC considerations).

> On the other hand maybe i need a better test.  The way bitsets are used 
> in
> the lexer you are usually only looking for a handful of characters in 
> the
> whole unicode range.   The idea behind the bitset i did was to use an
> offset so that largely empty int arrays covering the whole unicode range
> were not constructed.

ANTLR can do much more to remove bitsets than it does.  It needs 
subrange -> simple comparison convertion etc...  Now, it only works if 
the whole bitset is a range.  After that, a bitset tuned more for 
unicode would be useful, but we'd need to be careful that its degenerate 
case for ascii and my grammar analysis still move along fast enough.  
Simple hints like the offset you mention would be easy and work well.  
Fortunately, most of the time people reference ranges like "valid 
identifier character" that can be formally described a priori.  This 
prevents the lexer code generator from having to figure out an efficient 
bitset.  One might even have BitSet subclasses that efficiently 
implement a particular character set.

Ter


 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list