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