NAME Pugs::Compiler::Rule - Compiler for Perl 6 regexes VERSION This document describes Pugs::Compiler::Rule 0.28 released on 31 Oct, 2007. SYNOPSIS Un-named rules are objects: use Pugs::Compiler::Rule; my $rule = Pugs::Compiler::Rule->compile( '((.).).' ); my $match = $rule->match( 'abc' ); if ($match) { # true print $match; # "abc" print $match->from; # 0 print $match->to; # 3 print $match->[0]; # "ab" print $match->[0][0]; # "a" } Named rules are methods in a Grammar: package MyGrammar; use Pugs::Compiler::Rule; use base 'Pugs::Grammar::Base'; Pugs::Compiler::Rule->install( rule => '((.).).' ); my $match = MyGrammar->rule( 'abc' ); Rules may have parameters: $grammar->install(subrule => $source, { signature => $sig } ); $grammar->install(rule => q{ <subrule: param1, param2> }); where $grammar is normally a Perl 5 package. DESCRIPTION This module provides an pure Perl 5 implementation for Perl 6 regexes, which does not depend on the Haskell Pugs. It is a front-end to several other modules: Front-end Modules * Pugs::Compiler::Grammar compiles Perl 6 grammars to Perl 5. * Pugs::Compiler::Rule compiles Perl 6 rules to Perl 5. * Pugs::Compiler::Token compiles Perl 6 tokens to Perl 5. * Pugs::Compiler::Regex compiles Perl 6 regexes to Perl 5. * Pugs::Compiler::RegexPerl5 wraps Perl 5 regexes to return a Match object. Runtime Classes * Pugs::Runtime::Rule provides the runtime engine for Rules. * Pugs::Runtime::Match represents a Match object. * Pugs::Runtime::Grammar represents a Grammar class / object. Grammars * Pugs::Grammar::Rule parses the Rules syntax. * Pugs::Grammar::Base is the base Grammar: <ws>, <space>. Code Emitters * Pugs::Emitter::Rule::Perl5 converts parsed Rules to Perl 5 code. * Pugs::Emitter::Rule::Perl5::Ratchet converts parsed :ratchet Rules to Perl 5 code. * Pugs::Emitter::Grammar::Perl5 converts parsed grammars to Perl 5 code. INHERITANCE Pugs::Compiler::Rule isa Pugs::Compiler::Regex METHODS This class (i.e. Pugs::Compiler::Rule) is a subclass of Pugs::Compiler::Regex and thus owns all the methods of its base class. See Pugs::Compiler::Regex for the detailed docs. "$rule = Pugs::Compiler::Rule->compile($p6_regex, $params)" Specifically, this class overrides the "compile" method of Pugs::Compiler::Regex which resets the following options' default values: "ratchet => 1" Here is an example: $rule = Pugs::Compiler::Rule->compile( 'a*\w', ); my $match = $rule->match('aaa'); # $match->bool is false since no backtracking # happened "sigspace => 1" Here is an example: my $rule = Pugs::Compiler::Rule->compile( 'a b', ); my $match = $rule->match('a b'); ok $match->bool, 'sigspace works'; is $match->(), 'a b', 'sigspace works (2)'; CAVEATS This is an experimental development version. The API is still in flux. The set of implemented features depend on the "ratchet" switch. AUTHORS The Pugs Team "<perl6-compiler@perl.org>". Please join us on irc.freenode.net "#perl6" if you'd like to participate. SEE ALSO * Pugs::Compiler::Regex * Pugs::Compiler::Grammar * compile_p6grammar.pl * The Perl 6 Rules Spec: <http://perlcabal.org/syn/S05.html> COPYRIGHT Copyright 2006, 2007 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. See <http://www.perl.com/perl/misc/Artistic.html>