2011-12-06 31 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