2

この文字列として内部で再帰を処理できるレクサーでトークンを作成するにはどうすればよいですか。

${*anything*${*anything*}*anything*}

?

4

2 に答える 2

2

はい、レクサールール内で再帰を使用できます。

次の例を見てください。

${a ${b} ${c ${ddd} c} a}

これは、次の文法によって正しく解析されます。

parse
  : DollarVar
  ;

DollarVar
  : '${' (DollarVar | EscapeSequence | ~Special)+ '}'
  ;

fragment 
Special
  :  '\\' | '$' | '{' | '}'
  ;

fragment
EscapeSequence
  :  '\\' Special
  ;

ANTLRWorks内のインタプリタが示すように:

代替テキストhttp://img185.imageshack.us/img185/5471/recq.png

于 2010-03-31T21:06:40.317 に答える
0

@BartKが彼の投稿で巧みに指摘しているように、ANTLRのレクサーは再帰をサポートしていますが、パーサー内には単一のトークンしか表示されません。そのトークン内のさまざまな部分を解釈する必要がある場合は、おそらくパーサー内で処理する必要があります。

IMO、パーサーで何かをしたほうがいいでしょう:

variable: DOLLAR LBRACE id variable id RBRACE;

上記のようなことを行うことで、必要なすべての部分が表示され、それに応じて AST を構築したり、別の方法で処理したりできます。

于 2010-03-31T19:39:29.997 に答える