2007-08-01から1ヶ月間の記事一覧

構文解析(5)

どうやらandとnotの仕様を勘違いしていたらしい.しかし,andとnotが先読みとして動作するなら,先読みじゃないandとnotはどう実装するのか?ちなみに,先読み専用のpreを定義済みなので,pre(A),pre(not(A))とすれば,本来のand(A),not(A)の挙動はエミュで…

構文解析(4)

意外と引っ張るなこのネタ.http://ja.doukaku.org/51/に挑戦してみる.最初はparseだけでなんとかしようとして,気が狂いそうになったが,こっそりrubyの回答を見て,scanがあればいいのだと知る. module Parse def scan( str, target=:target) r = [] pos…

構文解析(3)

正規表現風の記法を作って,そこから等価なルールセットを生成できれば,もう少し見やすくなる? A|B AまたはB A&B AかつB !A A以外 A-B AかつB以外 = A&!Bと等価 () 優先順位変更 . 任意の1文字 [] 文字選択 [a-c]と[abc]が等価 * 0回以上の繰り返し + 1回…

構文解析(2)

raccを使ってて使いにくいと思っていた点が,構文解析の調査を兼ねて改めてドキュメントとサンプルを読み直した結果,単に自分が使い方を知らなかっただけで,当然のごとく実装されていたことが判明.おもにパースエラーが出たときの扱い.エラーが出ないと…

構文解析(1)

最近,構文解析が流行っているらしい.rakeっぽく作ればいけるかも?と適当に作ってみた.まったく理解していないけど一応動くものは出来たっぽい?中国語の部屋状態.四則演算はるびまのsyntax.rbそっくりになってしまった.そして判りにくい.こんなんなら…

間接的にメソッドを呼び出す

def foo(x) p ["foo", x] end send( :foo, "send") #=> ["foo", "send"] v = "foo" send( :"#{v}", "send-v") #=> ["foo", "send-v"] m = method( :foo) m.call("method") #=> ["foo", "method"] p = lambda {|x| foo(x)} p.call("proc") #=> ["foo", "proc"…

クロージャ

def test() c = 0 a = Proc.new {|e| p [e,c]} c = 1 b = Proc.new {|e| p [e,c]} return a,b end a,b = test a[7] => [7, 1] b[8] => [8, 1] 関数a,bはcを共有するのか. 自分でクロージャを実装するとしたら,a,bで別々のcを持つようにするのか?と考えて…