samples/parse-csv
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'd-parse'
require 'pp'
data = <<~DATA
first_name,last_name,age
Denis,Defreyne,29
DATA
module Grammar
extend DParse::DSL
FIELD = repeat(char_not_in([',', "\n"])).capture
LINE = intersperse(FIELD, char(',')).select_even
FILE = seq(intersperse(LINE, char("\n")).select_even, eof).first
end
pp Grammar::FILE.apply(data)