重用Antlr对象以获得新的输入字符串(C ++运行时)?

时间:2018-02-09 07:18:43

标签: antlr4

我使用C ++运行时演示构建了一个基本的解析器,它运行正常。但是我通常会解析很多输入字符串,是否可以修改代码以重复使用现有对象进行重复调用?如果是这样,有人有这方面的例子吗?

1 个答案:

答案 0 :(得分:1)

是的,可以重复使用这些对象。解析调用的典型序列如下所示:

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

parser.reset();
...

这可能是解析器服务类的一部分。所有对象(解析器,词法分析器,标记流,输入流)都在此类的c-tor中创建,然后为每个解析操作调用上面的代码。

但是,重复使用这些对象并不会带来太多好处。创建很便宜并且大量数据是静态保存的,因此不需要在每个解析器创建时重新创建。