次のように、antlr 3.4 を使用してパーサー文法を記述していました。
var : VAR_LEFT_PART atom_var VAR_RIGHT_PART ;
atom_var : ID | VAR_LEFT_PART ID VAR_RIGHT_PART ;
VAR_LEFT_PART : '{{';
VAR_RIGHT_PART : '}}';
ID : ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')* ;
INT : ('1'..'9')('0'..'9')* ;
NEWLINE:'\r'? '\n' ;
WS : (' '|'\t')+ { $channel = HIDDEN;} ;
以下のケースをテストすると:
問題は、文字列 "{{ {test} }}" が正しくないことですが、パーサーは ID を間違ったトークンとして認識しました。何が問題なのですか?