あおきです。

  In mail "[ruby-list:20032] Re: RD with method index (again)"
    Toshiro Kuwabara <toshirok / yb3.so-net.ne.jp> wrote:

> Toshです。

> >> 後半部分ですが、DescListの場合も
> >>   :ITEM
> >>    
> >>    DESCLIST
> >> 
> >> は許されるようになってると思います。手元の簡単なテストではこれを通しま
(略)
> すいません。間違えてました。
> おっしゃる通り、WHITELINEはその位置だと許されていません。
> これはRDtoolの実装上の問題なのですが、RDの仕様はこういう細かい事まで
> 決められてはいませんし、WHITELINEがその位置にいれられても特に便利な
> わけでもないですので、まあいいかな、と思ってます。

ぼくはその機能すごく欲しいです。
というか、すでに net/* は全部そうなってて、この前始めて rdtool を
試したら全滅してて衝撃をうけました(試してないのがバレバレ ^^;;)。
日本語だとそうでもないんですが、英語だと文字がつまってみえるので
あいだをあけたい感じがします。
# ちなみに net/* の RD はさっき直しました。

パッチだすかもしれません。

--

ところで、rdtool が遅いってことですが、とりあえずパーザ方面で
言えるのは、

*  { result = val[0] } はアクションを省略するほうが全然速い。
   そうするとアクション呼び出しと配列 val の生成が省略されます。

*  result が val[0] に初期化されることを活用するほうがいい。
   たとえば val[0].push val[1]; result = val[0] でなく
   いきなり result.push val[1] のほうがいい。
   result が val[0] 以外に初期化されることは将来に渡ってありません。

*  val はユーザの自由に使えるので使えるだけ使ったほうがいい。
   たとえば val が二個のときは result = [ val[1], val[2] ] より
   result = val などとしたほうが配列の生成を抑えられます。

*  スキャナを速くすると一気に高速になります。
   方法は……工夫してもらうってことで ^^;;

あと Racc とは関係ないですが Array#+ より concat が圧倒的に速いです。

どこで時間を食ってるのかは調べてませんが、
これらの修正でちょっとは速くなるんでないかと思います。
-------------------------------------------------------------------
あおきみねろう