[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

gEDA-user: Why gperf (was Re: Icarus Verilog going git.)



Dave McGuire wrote:
> On Jun 16, 2007, at 1:04 AM, Samuel A. Falvo II wrote:
>>>    Fortunately, gperf is an easy one to deal with.  And damn cool to
>>> *use*, too...I've used it in a number of projects and it has been
>>> fantastic.
>> I did not even know it existed until just now.
>>
>> It's said that GCC uses gperf for its keyword tables and so forth -- I
>> could have sworn they used Flex and Bison?  Those don't use gperf as
>> far as I'm aware.  Hmmm
> 
>    It does use flex and bison...but reserved word lookups are done  
> with gperf.  I don't know why that job isn't done by the lexer; I've  
> not dug into the GCC sources.  I am curious about it though.

Compilers do generally use flex/bison for the syntax and the general
lexical syntax, but normally there are so many keywords that making
a flex rule for every keyword would make for a horribly inefficient
flex state machine. So what is normally done in this case is to make
a flex rule to match identifiers, and then test in a hash table if
that identifier is a keyword. If it is, return the lex code for that
keyword. Otherwise, return the lex code for an identifier. This
generates a more compact lexical analyzer machine.

The gperf program is good at making those hash tables.

-- 
Steve Williams                "The woods are lovely, dark and deep.
steve at icarus.com           But I have promises to keep,
http://www.icarus.com         and lines to code before I sleep,
http://www.picturel.com       And lines to code before I sleep."



_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user