調子に乗ってRubyでもPEGパーザコンビネータ書いてみた。Rubyは素人(コード自動生成とかにしか使ってない)なので、もうちょっとこうした方がいいよ、とか、こうした方がRubyっぽいよ、とかあったら教えてください。 module PEGParserCombinator class Parser def initialize(&parser) @parser = parser end def [](input) @parser[input] end alias parse [] def /(that) Parser.new{|input| self[input] || that[input] } end def ^(that) Parser.new{|input| (r1 = self[input]) && (r2 = that[r1[1]]) && [[r1[0], r2[0]], r2