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) >> proc {|x| x }

  def parse(str)
    tokenizer = TDPUtils::StringTokenizer[
      /\d+/ => :int,
    ]
    input.parse(tokenizer.generate(str))
  end
}

p parser.parse("a 1")
p parser.parse("a  2 ")
p parser.parse("a 1  a 2")
p parser.parse("abc")

で、

["a", #<TDPUtils::Token:0x4034ba70 @value="1", @kind=:int>]
["a", #<TDPUtils::Token:0x4034b368 @value="2", @kind=:int>]
["a", #<TDPUtils::Token:0x4034ac38 @value="1", @kind=:int>]
nil