                   # =&gt; "ooo"@0

  # Added structure: .as(...)
  str('ooo').as(:ex1).parse('ooo')                  # =&gt; {:ex1=&gt;"ooo"@0}
  
  long = str('o').as(:ex2a).repeat.as(:ex2b).parse('ooo')  
  long # =&gt; {:ex2b=&gt;[{:ex2a=&gt;"o"@0}, {:ex2a=&gt;"o"@1}, {:ex2a=&gt;"o"@2}]}
</code></pre>
<p>You get to name things the way you want! This is also free. Seriously: parslet
requires you to add all the structure to its output. Annotate important parts
of your grammar with <code>.as(:symbol)</code