1

別のレクサーとパーサーの文法 (サンプルの ModeTagsLexer/ModeTagsParser から派生) があり、AntlrWorks 2 で理解できない警告が表示されます。

警告 (125): パーサーでのトークン OPEN の暗黙的な定義

OPENルールを警告に置き換えると'<'、警告が消えます。OPEN警告が表示されないとCLOSEistの違いは何だろうか。

私は antlr-4.1-complete.jar と 2013-01-22-antlrworks-2.0 を使用しています。

レクサー 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);

パーサー 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;

レクサー (変更):

// 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 grammar STParser;

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



unit: (tag | TEXT)* ;

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

0 に答える 0