The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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

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.

See http://www.perl.com/perl/misc/Artistic.html

4 POD Errors

The following errors were encountered while parsing the POD:

Around line 260:

'=item' outside of any '=over'

Around line 263:

You forgot a '=back' before '=head2'

Around line 269:

'=item' outside of any '=over'

Around line 284:

You forgot a '=back' before '=head1'