ce? }
  rule(:comma)      { str(',') &gt;&gt; space? }

  rule(:space)      { match('\s').repeat(1) }
  rule(:space?)     { space.maybe }

  # Things
  rule(:integer)    { match('[0-9]').repeat(1).as(:int) &gt;&gt; space? }
  rule(:identifier) { match['a-z'].repeat(1) }
  rule(:operator)   { match('[+]') &gt;&gt; space? }
  
  # Grammar parts
  rule(:sum)        { integer.as(:left) &gt;&gt; operator.as(:op) &gt;&gt; expression.as(:right) }
  rule(:arglist)    { expression &gt;&gt; (comma &gt;&gt; expression