我的工具意图是计算从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秒。
我希望时间会更短,并且希望知道可以优化哪个部分。