あおきです。

  In mail "[ruby-list:26768] Re: racc -E"
    Ueno Katsuhiro <unnie / blue.sky.or.jp> wrote:

> うえの@ぶるーすかいです。

> うちでも racc-1.2.6 から 1.3.2 に上げると今まで動いていた
> スクリプトが動かなくなりました。
> 
> 問題点を絞り込んでみたところ、こんな文法ファイルを racc-1.3.2 に
> 読ませると ParseError になるようです。

再現例を増やしてくださってありがとうございます(皮肉でなく)。
ふなばさんの報告にあったバグと原因は同じでした。
かなり致命的なバグだったのでこれからすぐに 1.3.3 を出します。
-------------------------------------------------------------------
青木峰郎

diff -u -r1.12 format.rb
--- format.rb	2000/12/17 17:34:43	1.12
+++ format.rb	2000/12/24 16:58:32
@@ -194,21 +194,21 @@
       map = ''
       maxdup = RE_DUP_MAX
       curr = nil
-      ex = '-'
-      ne = '.'
 
       while i < as do
         ii = i + 1
         if arr[i] then
           ii += 1 while ii < as and arr[ii]
-          map << (curr = ex)
+          curr = '-'
         else
           ii += 1 while ii < as and not arr[ii]
-          map << (curr = ne)
+          curr = '.'
         end
 
         offset = ii - i
-        if offset > 1 then
+        if offset == 1 then
+          map << curr
+        else
           while offset > maxdup do
             map << "#{curr}{#{maxdup}}"
             offset -= maxdup