package Pugs::Grammar::Postcircumfix;
use strict;
use warnings;
#use base qw(Pugs::Grammar::Operator);
use Pugs::Grammar::Operator;
use base qw(Pugs::Grammar::BaseCategory);
use Pugs::Grammar::Infix;
sub add_rule {
my $self = shift;
my %opt = @_;
$self->Pugs::Grammar::Operator::add_rule( %opt,
fixity => 'postcircumfix',
assoc => 'non',
);
$self->Pugs::Grammar::Operator::add_rule( %opt,
fixity => 'postcircumfix',
assoc => 'non',
name => 'postcircumfix:<' . $opt{name} . ' ' . $opt{name2} . '>',
);
$self->SUPER::add_rule(
$opt{name},
'{ return { op => "' . $opt{name} . '" ,} }' );
$self->SUPER::add_rule(
$opt{name2},
'{ return { op => "' . $opt{name2} . '" ,} }' );
$self->SUPER::add_rule(
"postcircumfix:<" . $opt{name} . " " . $opt{name2} . ">",
'{ return { op => "postcircumfix:<' . $opt{name} . ' ' . $opt{name2} . '>" ,} }' );
}
BEGIN {
__PACKAGE__->add_rule(
name => '(',
name2 => ')',
assoc => 'non',
precedence => 'equal',
other => 'circumfix:<( )>',
);
__PACKAGE__->add_rule(
name => '[',
name2 => ']',
assoc => 'left',
precedence => 'tighter',
other => 'prefix:<++>',
);
__PACKAGE__->add_rule(
name => '{',
name2 => '}',
assoc => 'non',
precedence => 'equal',
other => 'postcircumfix:<[ ]>',
);
__PACKAGE__->recompile;
}
1;