LL(1) Parser in Ruby