2009-10-11から1日間の記事一覧

parser generator書いてみた

現状こんな感じで書ける. lexer = Lexer.new("x + 4 * 5", /[ \t\n\r\v]+/) { token(:operator, /[+]/) {|ma| ma[0].to_sym } token(:operator2, /[*]/) {|ma| ma[0].to_sym } token(:integer, /[0-9]+/) {|ma| ma[0].to_i } token(:identifier, /[a-z]+/) …

StringScannerからMatchDataがとれない

indexで参照するには代替手段が用意されてるけど,名前で後から参照することができないようだ. s = StringScanner.new("hoge") s.scan(/.(?<k>.)/) p s[1] # => "o" p s[:k] # => -:4:in `[]': can't convert Symbol into Integer (TypeError)</k>