From: <per...@li...> - 2006-04-12 04:28:34
|
Update of /cvsroot/perl-flat/perl-flat/lib/FLAT/Regex In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21882/lib/FLAT/Regex Modified Files: Op.pm WithExtraOps.pm Log Message: at the point where I need to implement PFA->shuffle; twealed some of blokheads code so it was more obvious to me that op and member are sub routines. Implementation nodes can be seen at http://www.w4r3agle.net/flat/index.php?title=Estrabd%27s_Implementation_Notes Index: Op.pm =================================================================== RCS file: /cvsroot/perl-flat/perl-flat/lib/FLAT/Regex/Op.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Op.pm 12 Mar 2006 05:03:50 -0000 1.6 --- Op.pm 12 Apr 2006 04:28:28 -0000 1.7 *************** *** 5,9 **** my $pkg = shift; ## flatten alike operations, i.e, "a+(b+c)" into "a+b+c" ! my @flat = map { UNIVERSAL::isa($_, $pkg) ? $_->members : $_ } @_; bless \@flat, $pkg; --- 5,9 ---- my $pkg = shift; ## flatten alike operations, i.e, "a+(b+c)" into "a+b+c" ! my @flat = map { UNIVERSAL::isa($_, $pkg) ? $_->members() : $_ } @_; bless \@flat, $pkg; *************** *** 23,27 **** sub as_string { ! my $t = $_[0]->members; return "#" if not defined $t; --- 23,27 ---- sub as_string { ! my $t = $_[0]->members(); return "#" if not defined $t; *************** *** 32,36 **** sub as_perl_regex { ! my $r = $_[0]->members; return "(?!)" if not defined $r; --- 32,36 ---- sub as_perl_regex { ! my $r = $_[0]->members(); return "(?!)" if not defined $r; *************** *** 41,49 **** sub as_nfa { ! FLAT::NFA->singleton( $_[0]->members ); } sub as_pfa { ! FLAT::PFA->singleton( $_[0]->members ); } --- 41,49 ---- sub as_nfa { ! FLAT::NFA->singleton( $_[0]->members() ); } sub as_pfa { ! FLAT::PFA->singleton( $_[0]->members() ); } *************** *** 65,74 **** sub is_empty { ! not defined $_[0]->members; } sub has_nonempty_string { my $self = shift; ! defined $self->members and length $self->members; } --- 65,74 ---- sub is_empty { ! not defined $_[0]->members(); } sub has_nonempty_string { my $self = shift; ! defined $self->members() and length $self->members(); } *************** *** 86,90 **** sub as_string { my ($self, $prec) = @_; ! my $result = $self->members->as_string($self->precedence) . "*"; return $prec > $self->precedence ? "($result)" : $result; } --- 86,90 ---- sub as_string { my ($self, $prec) = @_; ! my $result = $self->members()->as_string($self->precedence) . "*"; return $prec > $self->precedence ? "($result)" : $result; } *************** *** 92,96 **** sub as_perl_regex { my ($self, $prec) = @_; ! my $result = $self->members->as_perl_regex($self->precedence) . "*"; return $prec > $self->precedence ? "(?:$result)" : $result; } --- 92,96 ---- sub as_perl_regex { my ($self, $prec) = @_; ! my $result = $self->members()->as_perl_regex($self->precedence) . "*"; return $prec > $self->precedence ? "(?:$result)" : $result; } *************** *** 98,107 **** sub as_nfa { my $self = shift; ! $self->members->as_nfa->kleene; } sub as_pfa { my $self = shift; ! $self->members->as_pfa->kleene; } --- 98,107 ---- sub as_nfa { my $self = shift; ! $self->members()->as_nfa->kleene; } sub as_pfa { my $self = shift; ! $self->members()->as_pfa->kleene; } *************** *** 113,117 **** sub reverse { my $self = shift; ! my $op = $self->members->reverse; __PACKAGE__->new($op); } --- 113,117 ---- sub reverse { my $self = shift; ! my $op = $self->members()->reverse; __PACKAGE__->new($op); } *************** *** 122,130 **** sub has_nonempty_string { ! $_[0]->members->has_nonempty_string; } sub is_finite { ! ! $_[0]->members->has_nonempty_string; } --- 122,130 ---- sub has_nonempty_string { ! $_[0]->members()->has_nonempty_string; } sub is_finite { ! ! $_[0]->members()->has_nonempty_string; } *************** *** 141,145 **** my $result = join "", map { $_->as_string($self->precedence) } ! $self->members; return $prec > $self->precedence ? "($result)" : $result; } --- 141,145 ---- my $result = join "", map { $_->as_string($self->precedence) } ! $self->members(); return $prec > $self->precedence ? "($result)" : $result; } *************** *** 149,153 **** my $result = join "", map { $_->as_perl_regex($self->precedence) } ! $self->members; return $prec > $self->precedence ? "(?:$result)" : $result; } --- 149,153 ---- my $result = join "", map { $_->as_perl_regex($self->precedence) } ! $self->members(); return $prec > $self->precedence ? "(?:$result)" : $result; } *************** *** 155,159 **** sub as_nfa { my $self = shift; ! my @parts = map { $_->as_nfa } $self->members; $parts[0]->concat( @parts[1..$#parts] ); } --- 155,159 ---- sub as_nfa { my $self = shift; ! my @parts = map { $_->as_nfa } $self->members(); $parts[0]->concat( @parts[1..$#parts] ); } *************** *** 161,165 **** sub as_pfa { my $self = shift; ! my @parts = map { $_->as_pfa } $self->members; $parts[0]->concat( @parts[1..$#parts] ); } --- 161,165 ---- sub as_pfa { my $self = shift; ! my @parts = map { $_->as_pfa } $self->members(); $parts[0]->concat( @parts[1..$#parts] ); } *************** *** 173,177 **** sub reverse { my $self = shift; ! my @ops = CORE::reverse map { $_->reverse } $self->members; __PACKAGE__->new(@ops); } --- 173,177 ---- sub reverse { my $self = shift; ! my @ops = CORE::reverse map { $_->reverse } $self->members(); __PACKAGE__->new(@ops); } *************** *** 179,183 **** sub is_empty { my $self = shift; ! my @members = $self->members; for (@members) { return 1 if $_->is_empty; --- 179,183 ---- sub is_empty { my $self = shift; ! my @members = $self->members(); for (@members) { return 1 if $_->is_empty; *************** *** 190,194 **** return 0 if $self->is_empty; ! my @members = $self->members; for (@members) { return 1 if $_->has_nonempty_string; --- 190,194 ---- return 0 if $self->is_empty; ! my @members = $self->members(); for (@members) { return 1 if $_->has_nonempty_string; *************** *** 201,205 **** return 1 if $self->is_empty; ! my @members = $self->members; for (@members) { return 0 if not $_->is_finite; --- 201,205 ---- return 1 if $self->is_empty; ! my @members = $self->members(); for (@members) { return 0 if not $_->is_finite; *************** *** 219,223 **** my $result = join "+", map { $_->as_string($self->precedence) } ! $self->members; return $prec > $self->precedence ? "($result)" : $result; } --- 219,223 ---- my $result = join "+", map { $_->as_string($self->precedence) } ! $self->members(); return $prec > $self->precedence ? "($result)" : $result; } *************** *** 227,231 **** my $result = join "|", map { $_->as_perl_regex($self->precedence) } ! $self->members; return $prec > $self->precedence ? "(?:$result)" : $result; } --- 227,231 ---- my $result = join "|", map { $_->as_perl_regex($self->precedence) } ! $self->members(); return $prec > $self->precedence ? "(?:$result)" : $result; } *************** *** 233,237 **** sub as_nfa { my $self = shift; ! my @parts = map { $_->as_nfa } $self->members; $parts[0]->union( @parts[1..$#parts] ); } --- 233,237 ---- sub as_nfa { my $self = shift; ! my @parts = map { $_->as_nfa } $self->members(); $parts[0]->union( @parts[1..$#parts] ); } *************** *** 239,243 **** sub as_pfa { my $self = shift; ! my @parts = map { $_->as_pfa } $self->members; $parts[0]->union( @parts[1..$#parts] ); } --- 239,243 ---- sub as_pfa { my $self = shift; ! my @parts = map { $_->as_pfa } $self->members(); $parts[0]->union( @parts[1..$#parts] ); } *************** *** 250,254 **** sub reverse { my $self = shift; ! my @ops = map { $_->reverse } $self->members; __PACKAGE__->new(@ops); } --- 250,254 ---- sub reverse { my $self = shift; ! my @ops = map { $_->reverse } $self->members(); __PACKAGE__->new(@ops); } *************** *** 256,260 **** sub is_empty { my $self = shift; ! my @members = $self->members; for (@members) { return 0 if not $_->is_empty; --- 256,260 ---- sub is_empty { my $self = shift; ! my @members = $self->members(); for (@members) { return 0 if not $_->is_empty; *************** *** 265,269 **** sub has_nonempty_string { my $self = shift; ! my @members = $self->members; for (@members) { return 1 if $_->has_nonempty_string; --- 265,269 ---- sub has_nonempty_string { my $self = shift; ! my @members = $self->members(); for (@members) { return 1 if $_->has_nonempty_string; *************** *** 274,278 **** sub is_finite { my $self = shift; ! my @members = $self->members; for (@members) { return 0 if not $_->is_finite; --- 274,278 ---- sub is_finite { my $self = shift; ! my @members = $self->members(); for (@members) { return 0 if not $_->is_finite; Index: WithExtraOps.pm =================================================================== RCS file: /cvsroot/perl-flat/perl-flat/lib/FLAT/Regex/WithExtraOps.pm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** WithExtraOps.pm 7 Apr 2006 20:14:34 -0000 1.6 --- WithExtraOps.pm 12 Apr 2006 04:28:28 -0000 1.7 *************** *** 31,35 **** sub as_string { my ($self, $prec) = @_; ! my $result = "~" . $self->members->as_string($self->precedence); return $prec > $self->precedence ? "($result)" : $result; } --- 31,35 ---- sub as_string { my ($self, $prec) = @_; ! my $result = "~" . $self->members()->as_string($self->precedence); return $prec > $self->precedence ? "($result)" : $result; } *************** *** 43,50 **** sub reverse { my $self = shift; ! my $op = $self->members->reverse; __PACKAGE__->new($op); } sub is_empty { croak "Not implemented for negated regexes"; --- 43,58 ---- sub reverse { my $self = shift; ! my $op = $self->members()->reverse; __PACKAGE__->new($op); } + sub as_pfa { + croak "Negate is not supported for RE->NFA"; + } + + sub as_pfa { + croak "Negate is not supported for PRE->PFA"; + } + sub is_empty { croak "Not implemented for negated regexes"; *************** *** 71,75 **** my $result = join "&", map { $_->as_string($self->precedence) } ! $self->members; return $prec > $self->precedence ? "($result)" : $result; } --- 79,83 ---- my $result = join "&", map { $_->as_string($self->precedence) } ! $self->members(); return $prec > $self->precedence ? "($result)" : $result; } *************** *** 82,90 **** sub as_pfa { my $self = shift; ! $self->members->as_pfa->shuffle; } sub reverse { ! croak "Not implemented for shuffled regexes, but it would be cool!"; } --- 90,100 ---- sub as_pfa { my $self = shift; ! $self->members()->as_pfa->shuffle; } sub reverse { ! my $self = shift; ! my $op = $self->members()->reverse; ! __PACKAGE__->new($op); } |