如何提高C ++目标上的Antlr4运行时性能?

时间:2019-07-15 04:36:19

标签: c++ performance antlr4

我的工具意图是计算从antlr4解析的结果。输入已经分成很多行, 例如:1 + 1,     3 * 4,     ... 每行将初始化解析器并调用访问者。因此,如果有1000行,它将调用antlr4解析器1000次。除了在设备上的性能稍慢之外,它运行完美。我希望能提高性能,即使速度要快1秒。

我正在使用antlr4.7作为运行时。运行时目标在c ++上。

for (itFormulas = fMap - > begin(); itFormulas != fMap - > end(); itFormulas++) 
{
  auto initStart = std::chrono::high_resolution_clock::now();

  ANTLRInputStream input(itFormulas - > second);
  FormulaLexer lexer( & input);
  CommonTokenStream tokens( & lexer);
  FormulaParser parser( & tokens);
  FormulaParser::MainContext * mainContext = parser.main();

  auto initEnd = std::chrono::high_resolution_clock::now();
  std::chrono::duration < double > totalInit = initEnd - initStart;

  //calculate time
  totalInitTime += totalInit.count();

  auto visitStart = std::chrono::high_resolution_clock::now();

  EvaluatorVisitor visitor(formulaMap, resultMap, inputMaps);

  try {
    antlrcpp::Any result = visitor.visit(mainContext - > children[0]);

    auto visitEnd = std::chrono::high_resolution_clock::now();
    std::chrono::duration < double > totalElapsed = visitEnd - visitStart;

    //calculate time
    totalVisitTime += totalElapsed.count();

    resultMap - > insert(pair < string, double > (itFormulas - > first, v));
  } catch (EvaluationException ex) {
    string from = "Mistake" + string(" itFormulas->") + itFormulas - > first;
  }
}

如果整个例程需要5秒 解析器时间将约为1秒,而访问者时间将为4秒。

我希望时间会更短,并且希望知道可以优化哪个部分。

0 个答案:

没有答案