From: kjana@... (YANAGAWA Kazuhisa) Date: 1998-12-01T20:21:52+09:00 Subject: [ruby-list:11160] Re: parser In message <199811290940.SAA27448@hanare00.math.sci.hokudai.ac.jp> gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) writes: > 半年くらい前に字句解析器なら作ったことありますが、 > チューニングを一切してないので死ぬほど遅いです。 > いま引っ張り出して試したら、rubyのeval.cから > コメントを抜きだすのにP6-300MHzで18秒もかかって > しまった :-< ちなみにどんなの書いたんでしょう? めちゃくちゃ手抜きな奴なら自分でも 何度か書いているんですが.これがまた,拡張性も何もないんですよね.... lex 並の記述から自動生成できるかも,というぐらいのことを意図して試し に書いた,という側面もあるんですが. # おおむねこんな感じ. while line = infile.gets while line.size > 0 case line when /^\s+(.*)/ line = $1 || "" when /^(\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)(.*)/ @tok << ["digit", $1.to_f] line = $2 || "" when /^([_a-zA-Z]\w*)(.*)/ @tok << ["symbol", $1] line = $2 || "" when /^"/ # "string" token を切り出し line を更新 line = read_string(line) when /^(.)(.*)/ # しらない文字は一字づつ @tok << ["char", $1] line = $2 || "" else # ここにはこないはず @tok << line line = "" end end end # 見ての通り一行ずつしか処理していないんで,"untermed-string" とか怪 # しげな token をつくって使う時に何とかするという (^^; > 構文解析器は欲しいですよねぇ… 実は欲しいのは構文解析器よりも構文解析器の自動生成器.... yacc のよう に.しかも動くだけではなく reasonable な cost-performance であること. yacc や bison を ruby で書くことはできるかもしれないけど,なんか意図 したものに対して生成も実行も重すぎるような気がしてしまう.気がするだ けだけど. # 自分でやるもんじゃないと決めてかかっている節あり (^^; =========================================================================== 柳川和久 @ 東大阪市 . 大阪府 kjana@os.xaxon.ne.jp December 1, 1998 「善なる意識が宇宙パワーで愛の波動に輪廻転生するんだろ?」 「メチャクチャインチキ話じゃないですか」