).repeat }
  rule(:funcall)    { identifier.as(:funcall) &gt;&gt; lparen &gt;&gt; arglist.as(:arglist) &gt;&gt; rparen }
  
  rule(:expression) { funcall | sum | integer }
  root :expression
end

require 'pp'
pp MiniP.new.parse("puts(1 + 2 + 3, 45)")
</code></pre>
<p>That&#8217;s really all there is to it &#8212; our language is a really simple language. 
When fed with a string like &#8217;<code>puts(1 + 2 + 3, 45)</code>, our parser outputs
the following:</p>
<pre class="output"> 
{:funcall=&gt;"puts"@0,
 