NAME
Pugs::Compiler::Regex - Compiler for Perl 6 Regex
SYNOPSIS
use
Pugs::Runtime::Match;
$regex
= Pugs::Compiler::Regex->compile(
'a*b'
);
$match
=
$regex
->match(
'aaab'
);
$match
->(),
"\n"
;
$match
->from,
"\n"
;
$match
->to,
"\n"
;
package
MyGrammar;
$regex
= Pugs::Compiler::Regex->compile(
'a*'
, {
ratchet
=> 1,
continue
=> 1,
sigspace
=> 1 }
);
*my_match
=
$regex
->code();
$match
= MyGrammar->my_match(
'aaaa'
);
"$match\n"
;
package
MyGrammar2;
$regex
= Pugs::Compiler::Regex->install(
my_match
=>
'a*'
,
{
ratchet
=> 1,
continue
=> 1,
sigspace
=> 1 }
);
$match
= MyGrammar->my_match(
'aaaa'
);
"$match\n"
;
DESCRIPTION
This class provides an implementation for Perl 6 regexes. It serves as a base class for Pugs::Compiler::Rule and Pugs::Compiler::Token.
METHODS
$regex = Pugs::Compiler::Regex->compile($str, $params);
-
This method acts like a constructor, which returns a Pugs::Compiler::Regex object from the p6 regex specified in
$str
, or throws an exception on invalid rule syntax.$params
is an optional argument which specifies the following p6 regex modifiers:grammar => 'Pugs::Grammar::Base'
-
Specify which namespace (Grammar) the rule belongs to. if
grammar
is not specified, then"Pugs::Grammar::Base"
will be assumed. continue => 0
c => 0
-
These modifiers cause the pattern to continue scanning from the string's current
pos
:Note that in Perl 6 form
m:c/pattern/
is roughlh equivalent to
m:p/ .*? pattern /
Here is an example:
package
Foo;
Pugs::Compiler::Regex->install(
word
=>
'\w+'
,
{
ratchet
=> 1,
continue
=> 1 }
);
$s
=
'hello world'
;
$match
= Foo->word(
$s
);
# got 'hello'
$match
= Foo->word(
$s
);
# got 'world'
XXX Note that
continue
orc
currently are not supported in non-ratchet mode. ratchet => 0
-
Disable backtracking. Much faster. Defaults to 0. (Pugs::Compiler::Rule and Pugs::Compiler::Token have the default value of 1).
pos => undef
p => undef
-
Specify a string position to match. Starts from zero. Defaults to
undef
, which matches anywhere in the string. sigspace => 0
-
Whitespace is significant. Defaults to 0 for Pugs::Compiler::Regex while 1 for Pugs::Compiler::Rule.
ignorecase => 0
-
Ignore character case. Defaults to 0 for Pugs::Compiler::Regex.
$regex->perl5()
$regex->perl()
-
Return a string holding the Perl 5 code for reconstructing the current Pugs::Compiler::Regex object.
We are trying to make the
perl5
method does something like serializing a Pugs::Compiler::Regex instance.If you want the raw Perl 5 code generated by the various emitters, use
$regex->{perl5}
directly. $regex->match($str, $grammar, $params)
-
Performs matching action on
$str
. Note that it's a thin wrapper around the p5 code compiled from the p6 regex with run-time modifier handling via the$params
argument.Here is an example:
$regex
= Pugs::Compiler::regex->compile(
'a*\w'
);
my
$match
=
$regex
->match(
'aaa'
);
print
"Capture: $match"
;
print
"From: "
,
$match
->from;
print
"To: "
,
$match
->to;
$regex->code()
-
Returns a closure (or an anonymous sub) which does the actual matching task. For example:
$regex
= Pugs::Compiler::Regex->compile(
'a|b'
, {
ratchet
=> 1 });
my
$sub
=
$regex
->code();
my
$match
=
$sub
->(
'MyGrammar'
,
'aaa'
);
Or inserts the sub into the current package:
package
Foo;
$regex
= Pugs::Compiler::Regex->compile(
'a*'
);
*match
=
$regex
->code();
my
$match
= __PACKAGE__->match(
'aaa'
);
Technically it's a thin wrapper around the
match
method. $regex->install($name, @args_for_compile)
-
Installs the subroutine returned from the
code
method as a named subroutine using the name specified by$name
;If
$name
is fully qualified, then the corresponding package is used, otherwise the current package is assumed.@args_for_compile
are those arguments fed into thecompile
method.It will croak if there's already a sub with the same name exists. If that's not what you want, use the
reinstall
method instead.Here are some examples:
package
Bar;
Pugs::Compiler::Regex->install(
match
=>
'a*'
, {
ratchet
=> 1});
$match
= Bar->match(
'aaa'
);
# The following line dies with the message
# "Can't install regex 'match' as 'Bar::match' which already
# exists":
Pugs::Compiler::Regex->install(
match
=>
'b*'
);
$regex->reinstall($name, @args_for_compile)
-
Like the
install
method but it can replaces the named sub if it already exists:package
Bar;
Pugs::Compiler::Regex->install(
'match'
,
'a*'
, {
ratchet
=> 1});
Pugs::Compiler::Regex->reinstall(
'match'
,
'b*'
);
};
$match
= Bar->match(
'bbb'
);
# matched here
PACKAGE VARIABLES
$Pugs::Compiler::Regex::NoCache
-
By default, the
compile
method will cache the compiled form (p5 source) of the p6 regex. TheNoCache
variable prevents any caching.
AUTHORS
The Pugs Team <perl6-compiler@perl.org>.
SEE ALSO
The Perl 6 Rules Spec: http://dev.perl.org/perl6/doc/design/syn/S05.html
COPYRIGHT
Copyright 2006 by Flavio Soibelmann Glock and others.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.