簡単な例。繰り返し

#!/usr/bin/env ruby

require 'tdp'

parser = TDParser.define {|g|
  g.a = "a"

  g.input = (g.a * (2..4)) >> proc {|x| x }

  def parse(str)
    tokens = str.split(/\s+/)
    input.parse(tokens)
  end
}

p parser.parse("a")
p parser.parse("a a")
p parser.parse("a a a")
p parser.parse("a a a a")
p parser.parse("a a a a a")
p parser.parse("a a a a a a")

で、

nil
[[["a"], ["a"]]]
[[["a"], ["a"], ["a"]]]
[[["a"], ["a"], ["a"], ["a"]]]
[[["a"], ["a"], ["a"], ["a"], ["a"]]]
[[["a"], ["a"], ["a"], ["a"], ["a"], ["a"]]]