从Antlr Listener获取返回值?

时间:2014-10-25 12:21:28

标签: antlr return-value void antlr4

我有一个Antlr生成的侦听器,我调用我的树步行器从另一个类的解析函数遍历树。看起来像这样:

public double calculate(){

     ANTLRInputStream input = new ANTLRInputStream("5+2");
     Lexer lexer = new Lexer(input);
     CommonTokenStream tokens = new CommonTokenStream(lexer);
     Parser parser = new Parser(tokens);
     ParseTree tree = parser.calculate();
     ParseTreeWalker walker = new ParseTreeWalker();
     walker.walk(new Listener(), tree);
     return 0;
}    

因此,侦听器与enter()和quit()函数完美配合,并在最后输出正确的值:

public void exitParser(ParserContext ctx) {
    result = stack.peek();
    System.out.println(result);
}    

但是我想在我的calculate()函数中接收最终值以将其返回到那里。由于exitParser(...)无效,我不知道如何处理它。

访客我能够这样做:

public double calculate(){
    // ...
    String value = new WRBVisitor().visit(tree);
    return Double.parseDouble(value);
}    

希望有人了解我的问题并知道解决方案。

祝你好运

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的:访客可能是您案例中更好的选择。访问者的方法将始终返回一个值,这是您似乎追求的。如果您的表达式始终评估为数值,或者某种自行开发的 Double可能代表Value,{{Double,那么这可能是Boolean 1}}等等。

在GitHub上查看我的演示表达式评估程序(使用访问者):https://github.com/bkiers/Mu

相关问题