[antlr-interest] Creation of Lexer and Parser in the loop? Bad idea

Ruslan Zasukhin sunshine at public.kherson.ua
Mon Oct 18 03:32:45 PDT 2004


Hi All,

I have note that we must write such code in C++

Foo( string SqlQuery )
{
    istringstream inp( SqlQuery.c_str() );


    Lexer lex( inp );
    Parser parser(lex);

    ..............
}


But if we look into constructor of Lexer we have

VSQL_Lexer::VSQL_Lexer(std::istream& in)
    : antlr::CharScanner(new antlr::CharBuffer(in),false)
{
    initLiterals();
}

void VSQL_Lexer::initLiterals()
{
    literals["words"] = 218;
    literals["local"] = 212;
    literals["blob"] = 111;
    literals["byte"] = 89;
    literals["action"] = 227;
    literals["nullif"] = 144;
    ..............
}


---------------------------------------------
I hope it is easy to see that Lexer must built the map for N elements.
For big grammar this is few hundreds of items.

Guys, this is terrible!

For example, if I will do in the loop 100,000 or million SQL commands
    INSERT INTO ...

Then I will need million times create/destroy objects of lexer and parer,
And what is the worst I need million (!!!!!!) times create and fill THE SAME
std::map. I believe this is just silly.

And I do not see that ANTLR can allow me create Lexer/Parser only once,
And reuse them for different texts many times.
Or I have miss something ?


I am sure that this DESIGN MISTAKE must be fixed in the ANTLR.

Any comments? 
Or advices how to reuse Lexer/Parser in huge loops?

And this is NOT theoretical tasks. SQL Server can get such loops very often.


-- 
Best regards,
Ruslan Zasukhin      [ I feel the need...the need for speed ]
-------------------------------------------------------------
e-mail: ruslan at paradigmasoft.com
web: http://www.paradigmasoft.com

To subscribe to the Valentina mail list go to:
http://lists.macserve.net/mailman/listinfo/valentina
-------------------------------------------------------------



 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com

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





More information about the antlr-interest mailing list