gpt4 book ai didi

antlr - 从 Antlr 监听器获取返回值?

转载 作者:行者123 更新时间:2023-12-02 03:31:19 41 4
gpt4 key购买 nike

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

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);
}

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

最好的祝福

最佳答案

正如评论中提到的:在您的情况下,访问者可能是更好的选择。访问者的方法将始终返回一个值,这似乎是您所追求的。那可能是 Double如果您的表达式总是计算为一个数值,或者某种自产的 Value可以代表 Double , Boolean , 等等。

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

关于antlr - 从 Antlr 监听器获取返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26562307/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com