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";
}
|