Show
Ignore:
Timestamp:
07/30/08 00:04:19 (5 months ago)
Author:
fglock
Message:

[PCR] 0.36

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • perl5/Pugs-Compiler-Rule/lib/Pugs/Compiler/RegexPerl5.pm

    r15778 r21619  
    1414# http://www.foo.be/docs/tpj/issues/vol2_3/tpj0203-0002.html 
    1515# is a good reference on the use of pos() 
     16 
     17sub _quote_rule { 
     18    my $rule_source = shift; 
     19    return 'm/' . $rule_source . '/' unless $rule_source =~ m{/}; 
     20    return 'm{' . $rule_source . '}' unless $rule_source =~ m/{/ || $rule_source =~ m/}/; 
     21    return 'm!' . $rule_source . '!' unless $rule_source =~ m/!/; 
     22    return 'm[' . $rule_source . ']' unless $rule_source =~ m/\[/ || $rule_source =~ m/\]/; 
     23    return 'm^' . $rule_source . '^' unless $rule_source =~ m/^/; 
     24} 
    1625 
    1726sub compile { 
     
    4453      '; 
    4554    $self->{perl5} =  
    46 q(do { 
     55q!do { 
    4756  my $rule;  
    4857  $rule = sub { # grammar, string, state, args 
     
    6069    pos(${$_[1]}) = $_[3]{p} 
    6170      if defined $_[3]{p}; 
    62     $bool = \( ${$_[1]} =~ /) . $rule_source . q(/g \) ? 1 : 0; ) .  
    63     $captures . q( 
     71    $bool = ( ${$_[1]} =~ ! 
     72        . _quote_rule( $rule_source )  
     73        . q(g \) ? 1 : 0; )  
     74        . $captures  
     75        . q! 
    6476  } 
    6577   
    6678  if ( defined $_[3]{p} ) { 
    6779      pos(${$_[1]}) = $_[3]{p}; 
    68       $bool = \( ${$_[1]} =~ /\G\(?:) . $rule_source . q(\)/ \) ? 1 : 0; ) .  
    69       $captures . q( 
     80      $bool = ( ${$_[1]} =~ !  
     81        . _quote_rule(  
     82                q(\\G\(?:) . $rule_source . ')'  
     83          )  
     84        . ' ) ? 1 : 0; '  
     85        . $captures  
     86        . q! 
    7087  } 
    7188  else { 
    72       $bool = \( ${$_[1]} =~ /) . $rule_source . q(/ \) ? 1 : 0; ) .  
    73       $captures . q( 
     89      $bool = ( ${$_[1]} =~ ! 
     90      . _quote_rule( $rule_source )  
     91      . q( \) ? 1 : 0; )  
     92      . $captures . q( 
    7493  } 
    7594}; 
     
    7897    # print 'rule perl5: ', do{use Data::Dumper; Dumper($self->{perl5})}; 
    7998 
    80     local $@; 
    81     $self->{code} = eval  
    82         $self->{perl5}; 
    83     die "Error in evaluation: $@\nSource:\n$self->{perl5}\n" if $@; 
    84  
     99    unless ( $param->{compile_only} ) { 
     100        local $@; 
     101        $self->{code} = eval  
     102            $self->{perl5}; 
     103        die "Error in evaluation: $@\nSource:\n$self->{perl5}\n" if $@; 
     104    } 
     105     
    85106    bless $self, 'Pugs::Compiler::Regex'; 
    86107}