cvsuser     04/11/07 19:15:48

  Modified:    languages/regex/lib/Regex/Ops Tree.pm
  Log:
  Add in rule declarations.
  
  Revision  Changes    Path
  1.13      +28 -1     parrot/languages/regex/lib/Regex/Ops/Tree.pm
  
  Index: Tree.pm
  ===================================================================
  RCS file: /cvs/public/parrot/languages/regex/lib/Regex/Ops/Tree.pm,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Tree.pm   29 Jan 2004 04:40:40 -0000      1.12
  +++ Tree.pm   8 Nov 2004 03:15:48 -0000       1.13
  @@ -38,6 +38,8 @@
   @Regex::Ops::Tree::alternate::ISA    = qw(Regex::Ops::Tree);
   @Regex::Ops::Tree::multi_match::ISA  = qw(Regex::Ops::Tree);
   @Regex::Ops::Tree::group::ISA        = qw(Regex::Ops::Tree::_onearg);
  [EMAIL PROTECTED]::Ops::Tree::call::ISA         = 
qw(Regex::Ops::Tree::_onearg);
  [EMAIL PROTECTED]::Ops::Tree::rule::ISA         = 
qw(Regex::Ops::Tree::_onearg);
   @Regex::Ops::Tree::scan::ISA         = qw(Regex::Ops::Tree::_onearg);
   @Regex::Ops::Tree::atend::ISA        = qw(Regex::Ops::Tree);
   @Regex::Ops::Tree::advance::ISA      = qw(Regex::Ops::Tree::_atom);
  @@ -88,7 +90,7 @@
   # compilation.
   #
   # Probably the best way to understand this stuff is to look at
  -# where it's used, mostly in PreOptimize.pm.
  +# where it's used, mostly in TreeOptimize.pm.
   ############################################################################
   
   sub order_startset {
  @@ -324,6 +326,13 @@
   sub minlen { $_[0]->{args}->[1]->minlen(); }
   sub maxlen { $_[0]->{args}->[1]->maxlen(); }
   
  +package Regex::Ops::Tree::rule;
  +sub minlen { my ($op) = @_; $op->{args}->[1]->minlen() }
  +sub maxlen { my ($op) = @_; $op->{args}->[1]->maxlen() }
  +sub startset { my ($op) = @_; $op->{args}->[1]->startset() }
  +sub hasback { my ($op) = @_; $op->{args}->[1]->hasback() }
  +sub dfa_safe { my ($op) = @_; $op->{args}->[1]->dfa_safe() }
  +
   # Rule calls are totally unpredictable -- for now. I think some static
   # analysis might not be too hard.
   package Regex::Ops::Tree::call;
  @@ -435,6 +444,17 @@
   sub Regex::Ops::Tree::check::needparen { 0 }
   sub Regex::Ops::Tree::check::render { $_[0]->{args}->[1]->render() }
   
  +sub Regex::Ops::Tree::rule::render {
  +    my $self = shift;
  +    my ($name, $tree) = @{ $self->{args} };
  +    my $expr = $tree->render;
  +    if ($name eq 'default') {
  +        return $expr;
  +    } else {
  +        return "rule $name { $expr }";
  +    }
  +}
  +
   ########################################################################
   # Dumping trees, for debugging only
   ########################################################################
  @@ -522,4 +542,11 @@
                $op->{args}->[1]->reftree() ];
   }
   
  +sub Regex::Ops::Tree::rule::reftree {
  +    my $op = shift;
  +    my ($rule, $tree) = @{ $op->{args} };
  +    return [ annotated($op, "rule($rule)"),
  +             $tree->reftree() ];
  +}
  +
   1;
  
  
  

Reply via email to