別のレクサーとパーサーの文法 (サンプルの ModeTagsLexer/ModeTagsParser から派生) があり、AntlrWorks 2 で理解できない警告が表示されます。
警告 (125): パーサーでのトークン OPEN の暗黙的な定義
OPEN
ルールを警告に置き換えると'<'
、警告が消えます。OPEN
警告が表示されないとCLOSE
istの違いは何だろうか。
私は 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
;