#!/usr/bin/perl # test.pl use strict; use warnings; use Data::Dumper qw( Dumper ); use Grammar qw( ); my $parser = Grammar->new(); foreach ( '4', '4 5', '4 5 6', '4*5*6', '{1}', '{1,2}', '4{1,2}', '4{1,2}5', '{1,2}{3,4}', '{1,2}*{3,4}', '{1,2}{3,4}5', '{1,2}{3,4}{5,6}', '{1,2}x{3,4}', '3{1,2}x{3,4}', '3x5', '3x{1,2}', '{1,2}x3', '{1,2}x{3,4,5}', '{1,2}{3,4,5}', '{1,2}x3{4,5}', '{1,2}x(3{4,5})', ) { my $rv = eval { $parser->parse($_) }; my $e = $@; if ($e) { $rv = "$_ = $e"; $rv =~ s/\n\z//; } elsif (!defined($rv)) { $rv = "$_ = Bad Expression"; } else { local $Data::Dumper::Indent = 0; $rv = Dumper($rv->[1]); substr($rv, -1, 1, ''); substr($rv, 0, 5, $_); } print("$rv\n"); }