簡単な例。token には正規表現も使えたよ

#!/usr/bin/env ruby

require 'tdp'

include TDParser

parser = TDParser.define {|g|
  g.input = ((token(/\d+/) - token("b") - token("c")) |
             (token(/./)   - token("b") - token("d"))) >> proc {|x| [x[0], x[1], x[2]] }

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

p parser.parse("1 b c")
p parser.parse("1 b d")
p parser.parse("a b c")

で、

["1", "b", "c"]
["1", "b", "d"]
nil