使用 ANTLR4 区分函数调用和索引数组

Distinguish between function calls and indexed arrays using ANTLR4

在函数名称和索引标识符以相同方式书写的意义上,一种语言的语法是不明确的:

var = function(5)    => function call where 5 is a parameter
var = array(5)       => element 5 of the array

为了能够做出区分,我需要进行第一遍并创建一个符号 table。之后我想使用谓词来做类似的事情:

reference
    :       {isFunction(getCurrentToken().getText())}? ident (argumentList?) 
    |       {!isFunction(getCurrentToken().getText())}? ident (subscriptionList)?
    ;

但仍有几个问题:

不知何故我觉得必须有一种简单、干净的方法来处理上述问题...

不是您可能寻求的直接答案,但我建议在解析后在代码中全部完成,而不是两次解析文件或使配对依赖于符号 table。

这可以通过允许函数调用/数组访问出现在其中任何一个被允许的地方来实现。

后面将规则转化为内部表示时,可以根据符号的知识来区分这两者table。