如何从ANTLR中的JavaScript回调返回操作值?

如何从ANTLR中的JavaScript回调返回操作值?,javascript,antlr,antlr4,Javascript,Antlr,Antlr4,我在玩这个游戏。虽然我知道如何用任何目标语言直接返回值,但我不知道如何处理返回值来自回调的特殊JavaScript情况 例如,我知道如何做到这一点: atom returns [cell] : number { console.log('number: ' + $number.text); $cell = $number.text; } ; 但不是这样,以异步方式(它显然不起作用,但用于说明概念。可以将回调函数传递给atom以发送结果): atom

我在玩这个游戏。虽然我知道如何用任何目标语言直接返回值,但我不知道如何处理返回值来自回调的特殊JavaScript情况

例如,我知道如何做到这一点:

atom    returns [cell]
        : number { console.log('number: ' + $number.text); $cell = $number.text; }
        ;
但不是这样,以异步方式(它显然不起作用,但用于说明概念。可以将回调函数传递给atom以发送结果)

atom    returns [cell]
        : number {console.log('number: ' + $number.text); myfunc($number, function(a) {$cell = a;}); }
        ;

无论如何,这样做是没有意义的。为什么不呢?您能详细说明一下吗?如果使用回调调用异步方法,那么回调所做的任何事情都不可能影响周围函数的返回值。异步操作完成后,回调将运行,但到那时原始外部函数将返回。是的,这就是问题的关键。由于ANTLR现在支持JavaScript,并且JavaScript具有异步性质,因此必须有一种方法来处理这种情况。第二节语法显然不正确,只是为了说明这个概念;也许我看不清你到底想干什么。您想知道如何告诉ANTLR生成的解析器需要处理语法规则引入的异步行为吗?这是一个非常有趣的问题,但我很遗憾地说,我无能为力:(