上田です。

rubyの話題にはなかなかついていけないので、
どうでもいいところにフォローします。 ;-)

ま> |各行にフィルード名と値が含まれ、レコードの区切りは空行という、
ま> |よくあるタイプのテキストデータベースがありますよね。ええと、
ま> |
ま> |DATABASE : (RECORD "\n")*
ま> |RECORD   : (FIELD "\n")*
ま> |FIELD    : KEY "\t" VALUE
ま> |
ま> |でいいのかな? (KEY,VALUEは文字列)

ま> えーと,shift reduce conflictになるんですけど.^^;;;
ま> あ,「レコードの区切りは空行」だから

ま> |DATABASE : (RECORD "\n\n")*

多分複数の空行があると空のレコードなのか空のフィールドなのか区別がつか
ないんじゃないかな。

DATABASE : (RECORD "\n" "\n"*) *

でどうでしょう? 

DATABASE : RECORD | DATABASE "\n" "\n"* RECORD

だと最後に空行がなくてもOKですね。

--HAL