- Timestamp:
- 07/30/08 00:04:19 (4 months ago)
- Location:
- perl5/Pugs-Compiler-Rule
- Files:
-
- 3 modified
-
Changes (modified) (1 diff)
-
lib/Pugs/Compiler/RegexPerl5.pm (modified) (4 diffs)
-
lib/Pugs/Compiler/Rule.pm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
perl5/Pugs-Compiler-Rule/Changes
r21578 r21619 1 0.36 2008-07-28 2 - fixed quoting in perl 5 regex emitter 3 1 4 0.35 2008-07-27 2 5 - fixed var name mangler -
perl5/Pugs-Compiler-Rule/lib/Pugs/Compiler/RegexPerl5.pm
r15778 r21619 14 14 # http://www.foo.be/docs/tpj/issues/vol2_3/tpj0203-0002.html 15 15 # is a good reference on the use of pos() 16 17 sub _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 } 16 25 17 26 sub compile { … … 44 53 '; 45 54 $self->{perl5} = 46 q (do {55 q!do { 47 56 my $rule; 48 57 $rule = sub { # grammar, string, state, args … … 60 69 pos(${$_[1]}) = $_[3]{p} 61 70 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! 64 76 } 65 77 66 78 if ( defined $_[3]{p} ) { 67 79 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! 70 87 } 71 88 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( 74 93 } 75 94 }; … … 78 97 # print 'rule perl5: ', do{use Data::Dumper; Dumper($self->{perl5})}; 79 98 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 85 106 bless $self, 'Pugs::Compiler::Regex'; 86 107 } -
perl5/Pugs-Compiler-Rule/lib/Pugs/Compiler/Rule.pm
r21578 r21619 5 5 package Pugs::Compiler::Rule; 6 6 7 our $VERSION = '0.3 5';7 our $VERSION = '0.36'; 8 8 9 9 use base 'Pugs::Compiler::Regex';
