?? re.pm.svn-base
字號:
#: re/re.pm#: Regexp emitter for re#: Copyright (c) 2006 Agent Zhang#: 2006-05-13 2006-05-15package re::re;use strict;use warnings;#use Data::Dumper::Simple;use re::AST;use re::Parser;use Language::AttributeGrammar;#use Scalar::Util qw( looks_like_number );sub translate { my ($self, $src) = @_; #warn $src; my $parser = re::Parser->new() or die "Can't construct the parser!\n"; my $ptree = $parser->program($src) or return undef; return $self->emit($ptree);}sub emit { my ($self, $ptree) = @_; #$Data::Dumper::Indent = 1; #warn Dumper($ptree); $re::re::emit::grammar ||= new Language::AttributeGrammar <<'END_GRAMMAR';program: $/.re = { $<expression>.re }expression: $/.re = { $<alternation>.re }alternation: $/.re = { re::re::emit_alternation( $<alternation>.re, $<concat>.re ) }concat: $/.re = { $<concat>.re . $<modified_atom>.re }modified_atom: $/.re = { $<atom>.re . $<modifier>.re; }atom: $/.re = { re::re::emit_atom( $<child>.re ) }modifier: $/.re = { $<__VALUE__> }char: $/.re = { $<__VALUE__> }nil: $/.re = { '' }END_GRAMMAR $re::re::emit::grammar->apply($ptree, 're');}sub emit_alternation { my ($a, $b) = @_; if ($a) { "$a|$b"; } else { $b; }}sub emit_atom { my ($re) = @_; if ($re =~ /^(?:\\.|[^*|()])$/ or $re =~ /^\(.*\)$/) { $re; } else { "($re)"; }}1;__END__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -