意义

问题描述:

我有一个规则为意义

nls 
    : NL* 
    ; 

与词法上编译令牌

// Inside (...) and [...] but not {...}, ignore newlines. 
NL : '\r'? '\n'   { this.ignoreTokenInsideParens(); } 
    ; 

,我得到

antlr: 
[java] error(69): Pel.g4:19:86: label nls conflicts with rule with same name 

我的理解是,标签#names你给生产的替代分支。我没有这样的标签。

那么,这个错误是什么意思?

看来你有一个名为nls潜规则,还要a label使用该名称:

nls 
    : NL* 
    ; 

... 

rule 
    : FOO BAR # nls 
    ; 

# nls(或#nls)是标签。

+0

是的,这就是我认为错误的含义。在语法中,我没有#标签 – MeBigFatGuy

+0

@MeBigFatGuy如果您在语法上做了CTRL + F,那么没有奇怪的'nls'用法?你不是用标签导入语法?如果没有,那么你可能发现了一个错误。你可以在这里报告:https://github.com/antlr/antlr4/issues –

由于@BartKiers我看着每一个NLS使用,并发现我有一个错误的等号(=),我必须去掉一个变量的分配规则中,但错过了=,像

expression nls AND nls =expression 

那是问题。

+0

很酷,很高兴听到你解决它。 –