in reply to recursive algorithm for nested data structures

Parse::RecDescent grammar:
my $grammar = <<'__EOI__' { use strict; use warnings; } parse : list /\Z/ { $item[1] } list : '(' list_ele(s?) ')' { $item[2] } list_ele : list | TERM TERM : /\w+/ __EOI__