ANTLR4在定义优先级

时间:2016-09-23 18:55:37

标签: antlr antlr4

以下是我非常简单的语法片段:

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的限制吗?要定义优先级,我是否必须将所有规则放在一个地方?

0 个答案:

没有答案