为什么AntlrWorks 2会在这种情况下显示警告125(解析器中令牌的隐式定义)?

时间:2013-07-16 08:12:49

标签: antlr4 antlrworks

我有一个单独的词法分析器和解析器语法(从示例ModeTagsLexer / ModeTagsParser派生)并在AntlrWorks 2中得到一个我不明白的警告:

warning(125):解析器中的标记OPEN的隐式定义

如果我将OPEN规则替换为'<',警告就会消失。我想知道OPENCLOSE之间的区别是什么,这是没有警告的。

我正在使用antlr-4.1-complete.jar和2013-01-22-antlrworks-2.0。

Lexer STLexer.g4:

lexer grammar STLexer;

// Default mode rules (the SEA)
OPEN  : '<'     -> pushMode(ISLAND) ;       // switch to ISLAND mode
TEXT  : ~'<'+ ;                         // clump all text together

mode ISLAND;
CLOSE : '>'     -> popMode ; // back to SEA mode
SLASH : '/' ;
ID    : [a-zA-Z0-9"=]+ ;                     // match/send ID in tag to parser
WS    : [ \t]+ -> channel(HIDDEN);

Parser STParser.g4:

parser grammar STParser;

options { tokenVocab=STLexer; } // use tokens from STLexer.g4



unit: (tag | TEXT)* ;

tag : OPEN ID+ CLOSE
    | OPEN SLASH ID+ CLOSE
    ;

如果我稍微重命名规则并删除其他模式,它甚至会持续存在:

lexer grammar STLexer;

Lexer(已修改):

// Default mode rules (the SEA)
OPPEN  : '<'    ;// -> pushMode(ISLAND) ;       // switch to ISLAND mode
TEXT  : ~'<'+ ;                         // clump all text together

//mode ISLAND;
CLOSE : '>'  ; //   -> popMode ; // back to SEA mode
SLASH : '/' ;
ID    : [a-zA-Z0-9"=]+ ;                     // match/send ID in tag to parser
WS    : [ \t]+ -> channel(HIDDEN);

Parser(已修改):

parser grammar STParser;

options { tokenVocab=STLexer; } // use tokens from STLexer.g4



unit: (tag | TEXT)* ;

tag : ID OPPEN ID+ CLOSE
    | ID OPPEN SLASH ID+ CLOSE
    ;

0 个答案:

没有答案