以下是我非常简单的语法片段:
function
: 'not' function
| function 'and' function
| function 'or' function
;
由于我使用库生成的访问者,为了使代码更清晰,我想创建一个子规则如下:
unaryFunction
: 'not' function
;
function
: unaryFunction
| function 'and' function
| function 'or' function
;
这种方式在访问者代码中会有一个额外的方法
visitUnaryFunctionContext(Parser.UnaryFunctionContext ctx)
所以当我进入这个区块时,我已经知道它不是some_function并且保存了很多检查。
但我发现如果我创建一个子规则“unaryFunction”优先级中断。在第二个语法样本中,单词“not”的优先级低于“and”/“或”。
这是antlr4的限制吗?要定义优先级,我是否必须将所有规则放在一个地方?