0

次のように、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 を間違ったトークンとして認識しました。何が問題なのですか?

4

1 に答える 1

0

ANTLR 3.4で試してみたところ、ちゃんと動くようです。eclipse プラグインのインタープリターは、投稿と同じ間違ったツリーを描画しましたが、バグがあることが知られています。

于 2012-11-20T10:34:08.183 に答える