Pugs::Compiler::Rule.3pm

Langue: en

Autres versions - même langue

Version: 2008-07-29 (fedora - 01/12/10)

Section: 3 (Bibliothèques de fonctions)

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 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>