From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1999-03-01T18:21:24+09:00 Subject: [ruby-list:12497] Re: [REQ] rlex.rb けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :12470 ] the message: "[ruby-list:12470] Re: [REQ] rlex.rb ", on Feb/27 01:58(JST) YANAGAWA Kazuhisa writes: >> rpgって何? > > NAME > > rpg -- Ruby Parser Generator もしくは Recursive-Parser Generator > >なんて README にはかいてありますね << ひとごとのようだ (^^; > >パーザジェネレータが話題になったころにちょこっとだけ書いて放っておいた >ら racc がでてきて,なんか悔しいから完成させたという再帰下降パーザ生成 >器です.相変わらず手抜きかついきあたりばったりな実装なので中身は汚いで >す. おぉ! >素直なパーザを吐くので後で手をいれるには便利かな,とか.手書きのパーザ >とだいたい同じようなコードを吐きます.あくまで私の手書きなので趣味が会 >わない人も多いでしょうが. うーん. それはある意味重要かも(^^;;; raccだと生成したコードからデバッ グって不可能に近いんですよね. >> 今って, 全てのパターンにマッチしない時の処理がいい加減ですよね? >> >> # っていうと怒られちゃうかな? > >本当に全てのパターンにマッチしない場合には else 節で一文字づつ切り出さ >れるようになってます.そこそこ妥当な処置だと思うんですけど. ええ. そうなっていますね. これをどうやって使うのか今一分からないんです が... ># それ以上はマッチが起こらないので無限ループに落ちる,っていうのよりは ># だいぶ妥当ではないかと. 例外だしてもらってもよいと思うんですが? >> それはともかく, 全てのパターンにマッチしなかった時にマッチする >> >> else >> >> 相当のもの欲しいんですが. いかがでしょう? > >「既に指定されている他の全てのパターンにマッチせず,あらゆる文字列にマッ >チするパターン」を各モードの最後に書いておけば良いのです `.+' とか. というかですね. ([^,\n]*)(,|\n) RETURN [:FIELD, $1] RETURN [:TERM, $2] 見たいなことをやりたかったんですね. つまり, 1つのマッチで複数のトーク ンを返したかったんです. で, これはできないんで ([^,\n]*)(,|\n) @term = $2 RETURN [:FIELD, $1], :NL else RETURN [:TERM, term], :defalt 見たく書ければよいなと... ># 空文字列にマッチすると無限ループに落ちるでしょう.多分. これできないですよね? こっちができても良いんですけどね. RETURN [:TERM, term], :defalt ungetを使えばできるんですが, 何か悔しいなと... __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---