Thank you

On Sat, Dec 12, 2009 at 12:17 AM, Jim Idle <[email protected]> wrote:

>  Ok – that is probably a bug. I guess nobody tried to do that before ;-).
> For now, you will have to recreate the parser each time until I can fix it.
>
>
>
> Jim
>
>
>
> *From:* Ronghui Yu [mailto:[email protected]]
> *Sent:* Friday, December 11, 2009 5:01 AM
> *To:* Jim Idle
> *Cc:* antlr-interest
> *Subject:* Re: [antlr-interest] Is there a safe and easy way to reuse
> LEXER and PARSER objects on C target?
>
>
>
> Here is my pseudo code:
>
>
>
> pLexer->pLexer->rec->reset(pLexer->pLexer->rec);
>
> pInputStream->data = (pANTLR3_UINT8)GetText().c_str();
>
> pInputStream->sizeBuf = (ANTLR3_UINT32)GetText().length();
>
> pInputStream->reset(pInputStream);
>
> pLexer->pLexer->setCharStream(pLexer->pLexer,pInputStream);
>
> pTokenStream->free(pTokenStream);
>
> pTokenStream = antlr3CommonTokenStreamSourceNew(TOKEN_SIZE_HINT,
> TOKENSOURCE(pLexer));
>
> pTokenStream->discardOffChannelToks(pTokenStream,ANTLR3_FALSE);
>
> pParser->pParser->setTokenStream(pParser->pParser,pTokenStream->tstream);
>
>
>
>
>
> It works most of the time, but occasionally violation access occurs. It
> doesn't work if applied to a grammar file importing another grammar. For
> example, I have a a keywords.g file is imported to the main grammar. When
> setting the token stream on the main grammar, the token string
> of embedded parser does not get updated automatically.
>
>
>
> On Fri, Dec 11, 2009 at 1:11 AM, Jim Idle <[email protected]> wrote:
>
> To be honest, I would think you can hardly measure the time taken to create
> them, but you have to call the reset() methods and set the character stream
> and the token stream. There were issues with that at one point but I think I
> have fixed them all now. You can see how to reuse the lexer by looking at
> the examples in the examples download. Specifically the Java parser example
> will help here.
>
>
>
> Jim
>
>
>
> *From:* [email protected] [mailto:
> [email protected]] *On Behalf Of *Ronghui Yu
> *Sent:* Thursday, December 10, 2009 8:21 AM
> *To:* antlr-interest
> *Subject:* [antlr-interest] Is there a safe and easy way to reuse LEXER
> and PARSER objects on C target?
>
>
>
> Hi, All,
>
>
>
> On my project, I have a parser for parsing different statements again and
> again. In order to save a little time on initialization, I would like to
> reuse the LEXER and PARSER objects created the first time, something like
> this:
>
>
>
> if (bInitialized)
>
> {
>
>     reinitialize();
>
> }
>
> else
>
> {
>
>    initialize();
>
>    bInitialized = true;
>
> }
>
>
>
> The problem now is how to write reinitialize() safely. I have no idea on
> which fields of LEXER or PARSER objects must be reset to which status. Then
> my current code works most of the time, but it encounters NULL pointer
> occasionally(I am sure the grammar file is good because if I don't reuse the
> LEXER and PARSER objects, everything goes fine).
>
>
>
> Anybody could give me some ideas?
>
>
>
> Thanks in advance.
>
> --
> ===========================
> Regards
> Ronghui Yu
>
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>
>
>
> --
> ===========================
> Regards
> Ronghui Yu
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>


-- 
===========================
Regards
Ronghui Yu

--

You received this message because you are subscribed to the Google Groups 
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

Reply via email to