recdescent.pm

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PM 代码 · 共 2,532 行 · 第 1/5 页

PM
2,532
字号
		"line"       => $_[4],	}, $class;}sub code($$$$){	my ($self, $namespace, $rule) = @_;		my $action = '';		if ($self->{"msg"})  # ERROR MESSAGE SUPPLIED	{		#WAS: $action .= "Parse::RecDescent::_error(qq{$self->{msg}}" .  ',$thisline);'; 		$action .= 'push @{$thisparser->{errors}}, [qq{'.$self->{msg}.'},$thisline];'; 	}	else	  # GENERATE ERROR MESSAGE DURING PARSE	{		$action .= '		my $rule = $item[0];		   $rule =~ s/_/ /g;		#WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline);		push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline];		'; 	}	my $dir =	      new Parse::RecDescent::Directive('if (' .		($self->{"commitonly"} ? '$commit' : '1') . 		") { do {$action} unless ".' $_noactions; undef } else {0}',	        			$self->{"lookahead"},0,$self->describe); 	$dir->{hashname} = $self->{hashname};	return $dir->code($namespace, $rule, 0);}1;package Parse::RecDescent::Token;sub sethashname { $_[0]->{hashname} = '__PATTERN' . ++$_[1]->{patcount} . '__'; }sub issubrule { undef }sub isterminal { 1 }sub describe ($) { shift->{'description'}}# ARGS ARE: $self, $pattern, $left_delim, $modifiers, $lookahead, $linenumsub new ($$$$$$){	my $class = ref($_[0]) || $_[0];	my $pattern = $_[1];	my $pat = $_[1];	my $ldel = $_[2];	my $rdel = $ldel;	$rdel =~ tr/{[(</}])>/;	my $mod = $_[3];	my $desc;	if ($ldel eq '/') { $desc = "$ldel$pattern$rdel$mod" }	else		  { $desc = "m$ldel$pattern$rdel$mod" }	$desc =~ s/\\/\\\\/g;	$desc =~ s/\$$/\\\$/g;	$desc =~ s/}/\\}/g;	$desc =~ s/{/\\{/g;	if (!eval "no strict;		   local \$SIG{__WARN__} = sub {0};		   '' =~ m$ldel$pattern$rdel" and $@)	{		Parse::RecDescent::_warn(3, "Token pattern \"m$ldel$pattern$rdel\"					     may not be a valid regular expression",					   $_[5]);		$@ =~ s/ at \(eval.*/./;		Parse::RecDescent::_hint($@);	}	# QUIETLY PREVENT (WELL-INTENTIONED) CALAMITY	$mod =~ s/[gc]//g;	$pattern =~ s/(\A|[^\\])\\G/$1/g;	bless 	{		"pattern"   => $pattern,		"ldelim"      => $ldel,		"rdelim"      => $rdel,		"mod"         => $mod,		"lookahead"   => $_[4],		"line"        => $_[5],		"description" => $desc,	}, $class;}sub code($$$$){	my ($self, $namespace, $rule, $check) = @_;	my $ldel = $self->{"ldelim"};	my $rdel = $self->{"rdelim"};	my $sdel = $ldel;	my $mod  = $self->{"mod"};	$sdel =~ s/[[{(<]/{}/;	my $code = '		Parse::RecDescent::_trace(q{Trying terminal: [' . $self->describe					  . ']}, Parse::RecDescent::_tracefirst($text),					  q{' . $rule->{name} . '},					  $tracelevel)						if defined $::RD_TRACE;		$lastsep = "";		$expectation->is(q{' . ($rule->hasleftmost($self) ? ''				: $self->describe ) . '})->at($text);		' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . '		' . ($self->{"lookahead"}<0?'if':'unless')		. ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and '		. ($check->{itempos}? 'do {'.Parse::RecDescent::Production::incitempos().' 1} and ' : '')		. '  $text =~ s' . $ldel . '\A(?:' . $self->{"pattern"} . ')'				 . $rdel . $sdel . $mod . ')		{			'.($self->{"lookahead"} ? '$text = $_savetext;' : '').'			$expectation->failed();			Parse::RecDescent::_trace(q{<<Didn\'t match terminal>>},						  Parse::RecDescent::_tracefirst($text))					if defined $::RD_TRACE;			last;		}		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}						. $& . q{])},						  Parse::RecDescent::_tracefirst($text))					if defined $::RD_TRACE;		push @item, $item{'.$self->{hashname}.'}=$&;		' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'';	return $code;}1;package Parse::RecDescent::Literal;sub sethashname { $_[0]->{hashname} = '__STRING' . ++$_[1]->{strcount} . '__'; }sub issubrule { undef }sub isterminal { 1 }sub describe ($) { shift->{'description'} }sub new ($$$$){	my $class = ref($_[0]) || $_[0];	my $pattern = $_[1];	my $desc = $pattern;	$desc=~s/\\/\\\\/g;	$desc=~s/}/\\}/g;	$desc=~s/{/\\{/g;	bless 	{		"pattern"     => $pattern,		"lookahead"   => $_[2],		"line"        => $_[3],		"description" => "'$desc'",	}, $class;}sub code($$$$){	my ($self, $namespace, $rule, $check) = @_;	my $code = '		Parse::RecDescent::_trace(q{Trying terminal: [' . $self->describe					  . ']},					  Parse::RecDescent::_tracefirst($text),					  q{' . $rule->{name} . '},					  $tracelevel)						if defined $::RD_TRACE;		$lastsep = "";		$expectation->is(q{' . ($rule->hasleftmost($self) ? ''				: $self->describe ) . '})->at($text);		' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . '		' . ($self->{"lookahead"}<0?'if':'unless')		. ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and '		. ($check->{itempos}? 'do {'.Parse::RecDescent::Production::incitempos().' 1} and ' : '')		. '  $text =~ s/\A' . quotemeta($self->{"pattern"}) . '//)		{			'.($self->{"lookahead"} ? '$text = $_savetext;' : '').'			$expectation->failed();			Parse::RecDescent::_trace(qq{<<Didn\'t match terminal>>},						  Parse::RecDescent::_tracefirst($text))							if defined $::RD_TRACE;			last;		}		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}						. $& . q{])},						  Parse::RecDescent::_tracefirst($text))							if defined $::RD_TRACE;		push @item, $item{'.$self->{hashname}.'}=$&;		' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'';	return $code;}1;package Parse::RecDescent::InterpLit;sub sethashname { $_[0]->{hashname} = '__STRING' . ++$_[1]->{strcount} . '__'; }sub issubrule { undef }sub isterminal { 1 }sub describe ($) { shift->{'description'} }sub new ($$$$){	my $class = ref($_[0]) || $_[0];	my $pattern = $_[1];	$pattern =~ s#/#\\/#g;	my $desc = $pattern;	$desc=~s/\\/\\\\/g;	$desc=~s/}/\\}/g;	$desc=~s/{/\\{/g;	bless 	{		"pattern"   => $pattern,		"lookahead" => $_[2],		"line"      => $_[3],		"description" => "'$desc'",	}, $class;}sub code($$$$){	my ($self, $namespace, $rule, $check) = @_;	my $code = '		Parse::RecDescent::_trace(q{Trying terminal: [' . $self->describe					  . ']},					  Parse::RecDescent::_tracefirst($text),					  q{' . $rule->{name} . '},					  $tracelevel)						if defined $::RD_TRACE;		$lastsep = "";		$expectation->is(q{' . ($rule->hasleftmost($self) ? ''				: $self->describe ) . '})->at($text);		' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) . '		' . ($self->{"lookahead"}<0?'if':'unless')		. ' ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and '		. ($check->{itempos}? 'do {'.Parse::RecDescent::Production::incitempos().' 1} and ' : '')		. '  do { $_tok = "' . $self->{"pattern"} . '"; 1 } and		     substr($text,0,length($_tok)) eq $_tok and		     do { substr($text,0,length($_tok)) = ""; 1; }		)		{			'.($self->{"lookahead"} ? '$text = $_savetext;' : '').'			$expectation->failed();			Parse::RecDescent::_trace(q{<<Didn\'t match terminal>>},						  Parse::RecDescent::_tracefirst($text))							if defined $::RD_TRACE;			last;		}		Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [}						. $_tok . q{])},						  Parse::RecDescent::_tracefirst($text))							if defined $::RD_TRACE;		push @item, $item{'.$self->{hashname}.'}=$_tok;		' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'';	return $code;}1;package Parse::RecDescent::Subrule;sub issubrule ($) { return $_[0]->{"subrule"} }sub isterminal { 0 }sub sethashname {}sub describe ($){	my $desc = $_[0]->{"implicit"} || $_[0]->{"subrule"};	$desc = "<matchrule:$desc>" if $_[0]->{"matchrule"};	return $desc;}sub callsyntax($$){	if ($_[0]->{"matchrule"})	{		return "&{'$_[1]'.qq{$_[0]->{subrule}}}";	}	else	{		return $_[1].$_[0]->{"subrule"};	}}sub new ($$$$;$$$){	my $class = ref($_[0]) || $_[0];	bless 	{		"subrule"   => $_[1],		"lookahead" => $_[2],		"line"      => $_[3],		"implicit"  => $_[4] || undef,		"matchrule" => $_[5],		"argcode"   => $_[6] || undef,	}, $class;}sub code($$$$){	my ($self, $namespace, $rule) = @_;	'		Parse::RecDescent::_trace(q{Trying subrule: [' . $self->{"subrule"} . ']},				  Parse::RecDescent::_tracefirst($text),				  q{' . $rule->{"name"} . '},				  $tracelevel)					if defined $::RD_TRACE;		if (1) { no strict qw{refs};		$expectation->is(' . ($rule->hasleftmost($self) ? 'q{}'				# WAS : 'qq{'.$self->describe.'}' ) . ')->at($text);				: 'q{'.$self->describe.'}' ) . ')->at($text);		' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' )		. ($self->{"lookahead"}<0?'if':'unless')		. ' (defined ($_tok = '		. $self->callsyntax($namespace.'::')		. '($thisparser,$text,$repeating,'		. ($self->{"lookahead"}?'1':'$_noactions')		. ($self->{argcode} ? ",sub { return $self->{argcode} }"				   : ',sub { \\@arg }')		. ')))		{			'.($self->{"lookahead"} ? '$text = $_savetext;' : '').'			Parse::RecDescent::_trace(q{<<Didn\'t match subrule: ['			. $self->{subrule} . ']>>},						  Parse::RecDescent::_tracefirst($text),						  q{' . $rule->{"name"} .'},						  $tracelevel)							if defined $::RD_TRACE;			$expectation->failed();			last;		}		Parse::RecDescent::_trace(q{>>Matched subrule: ['					. $self->{subrule} . ']<< (return value: [}					. $_tok . q{]},					  					  Parse::RecDescent::_tracefirst($text),					  q{' . $rule->{"name"} .'},					  $tracelevel)						if defined $::RD_TRACE;		$item{q{' . $self->{subrule} . '}} = $_tok;		push @item, $_tok;		' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .'		}'}package Parse::RecDescent::Repetition;sub issubrule ($) { return $_[0]->{"subrule"} }sub isterminal { 0 }sub sethashname {  }sub describe ($){	my $desc = $_[0]->{"expected"} || $_[0]->{"subrule"};	$desc = "<matchrule:$desc>" if $_[0]->{"matchrule"};	return $desc;}sub callsyntax($$){	if ($_[0]->{matchrule})		{ return "sub { goto &{''.qq{$_[1]$_[0]->{subrule}}} }"; }	else		{ return "\\&$_[1]$_[0]->{subrule}"; }}sub new ($$$$$$$$$$){	my ($self, $subrule, $repspec, $min, $max, $lookahead, $line, $parser, $matchrule, $argcode) = @_;	my $class = ref($self) || $self;	($max, $min) = ( $min, $max) if ($max<$min);	my $desc;	if ($subrule=~/\A_alternation_\d+_of_production_\d+_of_rule/)		{ $desc = $parser->{"rules"}{$subrule}->expected }	if ($lookahead)	{		if ($min>0)		{		   return new Parse::RecDescent::Subrule($subrule,$lookahead,$line,$desc,$matchrule,$argcode);		}		else		{			Parse::RecDescent::_error("Not symbol (\"!\") before				            \"$subrule\" doesn't make					    sense.",$line);			Parse::RecDescent::_hint("Lookahead for negated optional					   repetitions (such as					   \"!$subrule($repspec)\" can never					   succeed, since optional items always					   match (zero times at worst). 					   Did you mean a single \"!$subrule\", 					   instead?");		}	}	bless 	{		"subrule"   => $subrule,		"repspec"   => $repspec,		"min"       => $min,		"max"       => $max,		"lookahead" => $lookahead,		"line"      => $line,		"expected"  => $desc,		"argcode"   => $argcode || undef,		"matchrule" => $matchrule,	}, $class;}sub code($$$$){	my ($self, $namespace, $rule) = @_;		my ($subrule, $repspec, $min, $max, $lookahead) =		@{$self}{ qw{subrule repspec min max lookahead} };'		Parse::RecDescent::_trace(q{Trying repeated subrule: [' . $self->describe . ']},				  Parse::RecDescent::_tracefirst($text),				  q{' . $rule->{"name"} . '},				  $tracelevel)					if defined $::RD_TRACE;		$expectation->is(' . ($rule->hasleftmost($self) ? 'q{}'				# WAS : 'qq{'.$self->describe.'}' ) . ')->at($text);				: 'q{'.$self->describe.'}' ) . ')->at($text);		' . ($self->{"lookahead"} ? '$_savetext = $text;' : '' ) .'		unless (defined ($_tok = $thisparser->_parserepeat($text, '		. $self->callsyntax($namespace.'::')		. ', ' . $min . ', ' . $max . ', '		. ($self->{"lookahead"}?'1':'$_noactions')		. ',$expectation,'		. ($self->{argcode} ? "sub { return $self->{argcode} }"				   : 'undef')		. '))) 		{			Parse::RecDescent::_trace(q{<<Didn\'t match repeated subrule: ['			. $self->describe . ']>>},						  Parse::RecDescent::_tracefirst($text),						  q{' . $rule->{"name"} .'},						  $tracelevel)							if defined $::RD_TRACE;			last;		}		Parse::RecDescent::_trace(q{>>Matched repeated subrule: ['					. $self->{subrule} . ']<< (}					. @$_tok . q{ times)},					  					  Parse::RecDescent::_tracefirst($text),					  q{' . $rule->{"name"} .'},					  $tracelevel)						if defined $::RD_TRACE;		$item{q{' . "$self->{subrule}($self->{repspec})" . '}} = $_tok;		push @item, $_tok;		' . ($self->{"lookahead"} ? '$text = $_savetext;' : '' ) .''}package Parse::RecDescent::Result;sub issubrule { 0 }sub isterminal { 0 }sub describe { '' }sub new{	my ($class, $pos) = @_;	bless {}, $class;}sub code($$$$){	my ($self, $namespace, $rule) = @_;		'

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?