Antlr4 将Antlr对象重新用于新的输入字符串(C+;+;运行时)? 我用C++运行时演示程序构建了一个基本的解析器,它工作得很好。然而,我通常解析大量输入字符串,是否可以修改代码以重用现有对象进行重复调用?如果是这样,有人有这样的例子吗?

Antlr4 将Antlr对象重新用于新的输入字符串(C+;+;运行时)? 我用C++运行时演示程序构建了一个基本的解析器,它工作得很好。然而,我通常解析大量输入字符串,是否可以修改代码以重用现有对象进行重复调用?如果是这样,有人有这样的例子吗?,antlr4,Antlr4,是的,重用对象是可能的。解析调用的典型序列如下所示: input.load(newText); errors.clear(); lexer.reset(); lexer.setInputStream(&input); // Not just reset(), which only rewinds the current position. tokens.setTokenSource(&lexer); parser.reset(); ... 这可能是解析器服务类的一部分。所有对

是的,重用对象是可能的。解析调用的典型序列如下所示:

input.load(newText);
errors.clear();
lexer.reset();
lexer.setInputStream(&input); // Not just reset(), which only rewinds the current position.
tokens.setTokenSource(&lexer);

parser.reset();
...
这可能是解析器服务类的一部分。所有对象(解析器、lexer、令牌流、输入流)都是在这个类的c-tor中创建的,然后为每个解析操作调用上面的代码

但是,通过重用这些对象,您不会获得太多好处。创建是廉价的,而且重数据是静态保存的,因此不需要在每次解析器创建时重新创建