Pugs::Grammar::Precedence.3pm

Langue: en

Autres versions - même langue

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

Section: 3 (Bibliothèques de fonctions)

NAME

Pugs::Grammar::Precedence - Engine for Perl 6 Rule operator precedence

SYNOPSIS

   use Pugs::Grammar::Precedence;
 
   # example definition for "sub rxinfix:<|> ..."
 
   my $rxinfix = Pugs::Grammar::Precedence->new(
     grammar => 'rxinfix',
   );
   $rxinfix->add_op(
     name => '|',
     assoc => 'left',
     fixity => 'infix',
   );
 
 

Pseudo-code for usage inside a grammar:

     sub new_proto( $match ) {
         return ${$match<category>}.add_op(
             name => $match<name>,
             fixity => ...,
             precedence => ...,
         );
     }
 
     rule prototype {
         proto <category>:<name> <options>
         {
             return new_proto($/);
         }
     }
 
     rule statement {
         <category.parse> ...
     }
 
 

DESCRIPTION

This module provides an implementation for Perl 6 operator precedence.

METHODS

new ()

Class method. Returns a category object.

options:

*
"grammar => $category_name" - the name of this category (a namespace or a Grammar name).

add_op ()

Instance method. Adds a new operator to the category.

options:

*
name => $operator_name - the name of this operator, such as '+', '*'
*
name2 => $operator_name - the name of the second operator in an operator pair, such as circumfix [ '(', ')' ] or ternary [ '??', '!!' ].
  # precedence=>'tighter',
  #   tighter/looser/equiv
  # other=>'+',
  # fixity =>
  #  infix/prefix/circumfix/postcircumfix/ternary
  # assoc =>
  #  left/right/non/chain/list
  # rule=>$rule
  #  (is parsed)
 
 

AUTHORS

The Pugs Team <perl6-compiler@perl.org>.

SEE ALSO

Summary of Perl 6 Operators: <http://dev.perl.org/perl6/doc/design/syn/S03.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>