#!/usr/bin/perl use strict; use warnings; use Parse::RecDescent; $::RD_TRACE = 1; my $grammar = q{ program : statement | block statement : IDENT IDENT ';' block : IDENT '{' program '}' IDENT : /[A-J]+/ }; my $parser = Parse::RecDescent->new( $grammar ); my $input = join '', ; my $tree = $parser->program( $input ); use Data::Dumper; warn Dumper( $tree ); __DATA__ ABC { DEF { GHI ABD; } }