「{NUM}」と一致させてから、レクサールールに「NUM」を返させたいと思います。だから、やってみた
NUM : ('{' { skip(); }) 'NUM' ('}' { skip(); });
しかし、それはすべてをスキップし、試合で空を返すようです。レクサーマッチの一部をスキップすることは可能でしょうか?
antlr 3.4
ルールの任意の場所を呼び出すskip()
と、特定の文字だけでなく、トークン全体がレクサーから削除されます。
あなたができることはこれです:
NUM
: '{NUM}' {setText("NUM");}
;
または、NUM
が可変の場合は、次のようにします。
NUM
: '{' 'A'..'Z'+ '}' {setText($text.substring(1, $text.length() - 1));}
;
これにより、トークンから最初と最後の文字が削除されます。
smartnut007は次のように書いています。
トークンに対してこれを行う同等の方法はありますか?
パーサールール内のトークンのテキストを変更する方法を意味する場合は、次のことを試してください。
parser_rule
: LEXER_RULE {$LEXER_RULE.setText("new-text");}
;
LEXER_RULE
: 'old-text'
;