From: <per...@li...> - 2006-03-10 06:00:32
|
Update of /cvsroot/perl-flat/perl-flat/lib/FLAT/Regex In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21362/lib/FLAT/Regex Modified Files: WithExtraOps.pm Log Message: made some more tweaks and trying to figure things out - ran make tests to ensure I did not screw anything up that was already working Index: WithExtraOps.pm =================================================================== RCS file: /cvsroot/perl-flat/perl-flat/lib/FLAT/Regex/WithExtraOps.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** WithExtraOps.pm 24 Feb 2006 15:41:03 -0000 1.3 --- WithExtraOps.pm 10 Mar 2006 06:00:24 -0000 1.4 *************** *** 4,16 **** use strict; use Carp; my $PARSER = FLAT::Regex::Parser->new(qw[ alt concat star negate shuffle ]); sub _parser { $PARSER } #### Precedence # 30 ::star # 20 ::concat ! # 15 ::negate <---<< ! # 12 ::shuffle <---<< # 10 ::alt # 0 ::atomic --- 4,27 ---- use strict; use Carp; + use FLAT::PFA; my $PARSER = FLAT::Regex::Parser->new(qw[ alt concat star negate shuffle ]); sub _parser { $PARSER } + sub members { + my $self = shift; + wantarray ? @$self[0 .. $#$self] : $self->[0]; + } + + # In the absence of a shuffle operator, the PFA will be a NFA + sub as_pfa { + FLAT::PFA->singleton( $_[0]->members ); + } + #### Precedence # 30 ::star # 20 ::concat ! # 15 ::negate <---<< WithExtraOps ! # 12 ::shuffle <---<< WithExtraOps # 10 ::alt # 0 ::atomic *************** *** 57,60 **** --- 68,72 ---- package FLAT::Regex::Op::shuffle; use base 'FLAT::Regex::Op'; + use Carp; sub parse_spec { "%s(2.. /[&]/)" } *************** *** 69,83 **** } - sub shuffle { - my $self = shift; - # will handle shuffle operatation - } - - sub as_pfa { - my $self = shift; - # ... will turn shuffle instance into PFA - similar to Op->alt->as_nfa, - # but a tiny different...if I may offer you a riddle :) - } - sub from_parse { my ($pkg, @item) = @_; --- 81,84 ---- *************** *** 85,118 **** } sub reverse { my $self = shift; ! my @ops = map { $_->reverse } $self->members; ! __PACKAGE__->new(@ops); } sub is_empty { ! my $self = shift; ! my @members = $self->members; ! for (@members) { ! return 1 if $_->is_empty; ! } ! return 0; } sub has_nonempty_string { ! my $self = shift; ! my @members = $self->members; ! for (@members) { ! return 1 if $_->has_nonempty_string; ! } ! return 0; } sub is_finite { ! my $self = shift; ! my @members = $self->members; ! for (@members) { ! return 0 if not $_->is_finite; ! } ! return 1; } --- 86,105 ---- } + ## note: "reverse" conflicts with perl builtin sub reverse { my $self = shift; ! my $op = $self->members->reverse; ! __PACKAGE__->new($op); } sub is_empty { ! croak "Not implemented for shuffled regexes"; } sub has_nonempty_string { ! croak "Not implemented for shuffled regexes"; } sub is_finite { ! croak "Not implemented for shuffled regexes"; } |