この文字列として内部で再帰を処理できるレクサーでトークンを作成するにはどうすればよいですか。
${*anything*${*anything*}*anything*}
?
はい、レクサールール内で再帰を使用できます。
次の例を見てください。
${a ${b} ${c ${ddd} c} a}
これは、次の文法によって正しく解析されます。
parse
: DollarVar
;
DollarVar
: '${' (DollarVar | EscapeSequence | ~Special)+ '}'
;
fragment
Special
: '\\' | '$' | '{' | '}'
;
fragment
EscapeSequence
: '\\' Special
;
ANTLRWorks内のインタプリタが示すように:
@BartKが彼の投稿で巧みに指摘しているように、ANTLRのレクサーは再帰をサポートしていますが、パーサー内には単一のトークンしか表示されません。そのトークン内のさまざまな部分を解釈する必要がある場合は、おそらくパーサー内で処理する必要があります。
IMO、パーサーで何かをしたほうがいいでしょう:
variable: DOLLAR LBRACE id variable id RBRACE;
上記のようなことを行うことで、必要なすべての部分が表示され、それに応じて AST を構築したり、別の方法で処理したりできます。