TDPUtils::StringTokenizer は改行を扱える?
#!/usr/bin/env ruby require 'tdp' require 'tdp/utils' parser = TDParser.define {|g| g.a = "a" g.input = g.a - g.token(:int) - g.token("\n") >> proc {|x| x } def parse(str) tokenizer = TDPUtils::StringTokenizer[ /\d+/ => :int, ] #input.parse(tokenizer.generate(str)) tg = tokenizer.generate(str) p tg p tg.shift() p tg.shift() p tg.shift() end } p parser.parse("a 1\n")
で、
#<TDParser::TokenGenerator:0x4034c650 @cont_yield=#<Continuation:0x4034bbd8>, @cont_next=nil, @block=#<Proc:0x402c4b0c@/usr/local/lib/site_ruby/1.8/tdp/utils.rb:40>, @buffer=[], @queue=["a"], @cont_endp=nil, @index=0> "a" #<TDPUtils::Token:0x4034b96c @value="1", @kind=:int> nil nil
無理なのかな???
こうすれば、良いのかな?
#!/usr/bin/env ruby require 'tdp' require 'tdp/utils' parser = TDParser.define {|g| g.a = "a" g.input = g.a - g.token(:int) - g.token("\n") >> proc {|x| x } def parse(str) tokenizer = TDPUtils::StringTokenizer.new( { /\d+/ => :int, /\n/ => :EOL }, /[ \t]/) #input.parse(tokenizer.generate(str)) tg = tokenizer.generate(str) p tg p tg.shift() p tg.shift() p tg.shift() end } p parser.parse("a 1\n")
で、
#<TDParser::TokenGenerator:0xb7c4f8a8 @block=#<Proc:0xb7c53494@/usr/local/ruby-1.8.7/lib/ruby/gems/1.8/gems/tdp4r-1.4.1/lib/tdp/utils.rb:40>, @queue=["a"], @cont_endp=nil, @index=0, @cont_yield=#<Continuation:0xb7c4f77c>, @buffer=[], @cont_next=nil> "a" #<TDPUtils::Token:0xb7c4f27c @kind=:int, @value="1"> #<TDPUtils::Token:0xb7c4f074 @kind=:EOL, @value="\n"> nil