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
方法,但是如何使用它們來解析新的字符串呢?
我是否還需要在詞法分析器/解析器/流上調用重置?你介意提供一個簡短的例子嗎? – rickythefox
您不應該手動調用'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