antlr4 - 为新的输入字符串重用 Antlr 对象(C++ 运行时)?

标签 antlr4

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

最佳答案

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

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

parser.reset();
...

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

但是,重复使用这些对象并不会带来多少好处。创建成本低廉,并且大量数据是静态保存的,因此不需要在每次解析器创建时重新创建。

关于antlr4 - 为新的输入字符串重用 Antlr 对象(C++ 运行时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62342281/

相关文章:

antlr - 是否可以从 antlr4 中的解析器定义的标签中检索列表?

antlr - 如何在 Antlr 4/c# 中控制错误处理和同步

eclipse - Eclipse 下的 ANTLR4 在不正确的包中生成源

java - 语法规则优先级如何工作?

java - 如何忽略 ANTLR4 中的某些文本?

c++ - 在语法文件上运行 c++ 的 antlr4 解析器显示错误 33 : missing code generation template NonLocalAttrRefHeader

java - 如何在java swing中运行ANTLR GUI?

algorithm - 运行解析器时出现 Antlr4 错误

comments - ANTLR4。评论没有被词法分析器吞没

java - Antlr异常: there is no serialized ATN