2011-12-06 38 views
0

我創建一個字符串輸入流與重用ANTLR3詞法和語法分析器

pANTLR3_UINT8 input_string = (pANTLR3_UINT8) "test"; 
pANTLR3_INPUT_STREAM stream = antlr3StringStreamNew(input_string, ANTLR3_ENC_8BIT, sizeof(input_string), (pANTLR3_UINT8)"testname"); 

,然後用我的詞法和語法分析器來處理字符串。當我完成這個字符串時,我想處理一個新的字符串,但重新創建詞法分析器和分析器對象似乎效率不高。

我發現了詞法分析器類的reset方法和流的reuse方法,但是如何使用它們來解析新的字符串呢?

回答

1

我相信你要找的是setCharStream()函數。

+0

我是否還需要在詞法分析器/解析器/流上調用重置?你介意提供一個簡短的例子嗎? – rickythefox

+0

您不應該手動調用'reset()'; [C版本](http://www.antlr.org/depot/antlr3/release-3.1.3/runtime/C/src/antlr3lexer.c)重置了大部分內部變量(以及對調用'setCharStream ()'提到重置狀態)。 ([Java版本](http://www.antlr.org/api/Java/_lexer_8java-source.html#l00123)也顯式調用'reset()')。你應該能夠創建一個新的' pantLR3_INPUT_STREAM'用於你的新流,並用'setCharStream(lexer,new_stream)'重置,像你已經完成的那樣構造流。 – sarnold