簡単な例。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