簡単な例。leftrec

#!/usr/bin/env ruby

require 'tdp'

parser = TDParser.define {|g|
  g.a = "a"
  g.b = "b"
  g.c = "c"
  g.d = "d"

  g.input = g.leftrec(g.a, g.b, g.c) {|x| p x }

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

p parser.parse("a b"); puts "*"
p parser.parse("a c"); puts "*"
p parser.parse("a d")

で、

"a"
*
["a", "c"]
nil
*
"a"

想像していた動きと違うようだ。で、結局、何だっけ?