@@ -697,23 +697,21 @@ grammar NQP::Grammar is HLL::Grammar {
697
697
698
698
# # Operators
699
699
700
- INIT {
701
- NQP::Grammar. O(' %methodop' , : prec<y= >, : assoc<unary >);
702
- NQP::Grammar. O(' %autoincrement' , : prec<x= >, : assoc<unary >);
703
- NQP::Grammar. O(' %exponentiation' , : prec<w= >, : assoc<left >);
704
- NQP::Grammar. O(' %symbolic_unary' , : prec<v= >, : assoc<unary >);
705
- NQP::Grammar. O(' %multiplicative' , : prec<u= >, : assoc<left >);
706
- NQP::Grammar. O(' %additive' , : prec<t= >, : assoc<left >);
707
- NQP::Grammar. O(' %concatenation' , : prec<r= >, : assoc<left >);
708
- NQP::Grammar. O(' %relational' , : prec<m= >, : assoc<non >);
709
- NQP::Grammar. O(' %tight_and' , : prec<l= >, : assoc<left >);
710
- NQP::Grammar. O(' %tight_or' , : prec<k= >, : assoc<left >);
711
- NQP::Grammar. O(' %conditional' , : prec<j= >, : assoc<right >);
712
- NQP::Grammar. O(' %assignment' , : prec<i= >, : assoc<right >);
713
- NQP::Grammar. O(' %comma' , : prec<g= >, : assoc<list >, : nextterm<nulltermish >);
714
- NQP::Grammar. O(' %list_infix' , : prec<f= >, : assoc<list >);
715
- NQP::Grammar. O(' %list_prefix' , : prec<e= >, : assoc<unary >);
716
- }
700
+ my % methodop := nqp ::hash(' prec' , ' y=' , ' assoc' , ' unary' );
701
+ my % autoincrement := nqp ::hash(' prec' , ' x=' , ' assoc' , ' unary' );
702
+ my % exponentiation := nqp ::hash(' prec' , ' w=' , ' assoc' , ' left' );
703
+ my % symbolic_unary := nqp ::hash(' prec' , ' v=' , ' assoc' , ' unary' );
704
+ my % multiplicative := nqp ::hash(' prec' , ' u=' , ' assoc' , ' left' );
705
+ my % additive := nqp ::hash(' prec' , ' t=' , ' assoc' , ' left' );
706
+ my % concatenation := nqp ::hash(' prec' , ' r=' , ' assoc' , ' left' );
707
+ my % relational := nqp ::hash(' prec' , ' m=' , ' assoc' , ' non' );
708
+ my % tight_and := nqp ::hash(' prec' , ' l=' , ' assoc' , ' left' );
709
+ my % tight_or := nqp ::hash(' prec' , ' k=' , ' assoc' , ' left' );
710
+ my % conditional := nqp ::hash(' prec' , ' j=' , ' assoc' , ' right' );
711
+ my % assignment := nqp ::hash(' prec' , ' i=' , ' assoc' , ' right' );
712
+ my % comma := nqp ::hash(' prec' , ' g=' , ' assoc' , ' list' , ' nextterm' , ' nulltermish' );
713
+ my % list_infix := nqp ::hash(' prec' , ' f=' , ' assoc' , ' list' );
714
+ my % list_prefix := nqp ::hash(' prec' , ' e=' , ' assoc' , ' unary' );
717
715
718
716
719
717
token infixish { <!infixstopper > <OPER = infix > }
@@ -724,90 +722,90 @@ grammar NQP::Grammar is HLL::Grammar {
724
722
725
723
token postcircumfix :sym <[ ] > {
726
724
'[' <.ws > <EXPR > ']'
727
- <O (: inherit< %methodop > )>
725
+ <O (| % methodop )>
728
726
}
729
727
730
728
token postcircumfix :sym <{ } > {
731
729
'{' <.ws > <EXPR > '}'
732
- <O (: inherit< %methodop > )>
730
+ <O (| % methodop )>
733
731
}
734
732
735
733
token postcircumfix :sym <ang > {
736
734
<?[ < ] > <quote_EXPR : ':q' >
737
- <O (: inherit< %methodop > )>
735
+ <O (| % methodop )>
738
736
}
739
737
740
738
token postcircumfix :sym <( ) > {
741
739
'(' <.ws > <arglist > ')'
742
- <O (: inherit< %methodop > )>
740
+ <O (| % methodop )>
743
741
}
744
742
745
- token postfix :sym <. > { <dotty > <O (: inherit< %methodop > )> }
743
+ token postfix :sym <. > { <dotty > <O (| % methodop )> }
746
744
747
- token prefix :sym <++ > { <sym > <O (: inherit< %autoincrement > , : op<preinc >)> }
748
- token prefix :sym <-- > { <sym > <O (: inherit< %autoincrement > , : op<predec >)> }
745
+ token prefix :sym <++ > { <sym > <O (| % autoincrement , : op<preinc >)> }
746
+ token prefix :sym <-- > { <sym > <O (| % autoincrement , : op<predec >)> }
749
747
750
- token postfix :sym <++ > { <sym > <O (: inherit< %autoincrement > , : op<postinc >)> }
751
- token postfix :sym <-- > { <sym > <O (: inherit< %autoincrement > , : op<postdec >)> }
748
+ token postfix :sym <++ > { <sym > <O (| % autoincrement , : op<postinc >)> }
749
+ token postfix :sym <-- > { <sym > <O (| % autoincrement , : op<postdec >)> }
752
750
753
- token infix :sym <** > { <sym > <O (: inherit< %exponentiation > , : op<pow_n >)> }
751
+ token infix :sym <** > { <sym > <O (| % exponentiation , : op<pow_n >)> }
754
752
755
- token prefix :sym <+ > { <sym > <O (: inherit< %symbolic_unary > , : op<numify >)> }
756
- token prefix :sym <~ > { <sym > <O (: inherit< %symbolic_unary > , : op<stringify >)> }
757
- token prefix :sym <- > { <sym > <![ > ] > <!number > <O (: inherit< %symbolic_unary > , : op<neg_n >)> }
758
- token prefix :sym <? > { <sym > <O (: inherit< %symbolic_unary > , : op<istrue >)> }
759
- token prefix :sym <! > { <sym > <O (: inherit< %symbolic_unary > , : op<falsey >)> }
760
- token prefix :sym <| > { <sym > <O (: inherit< %symbolic_unary > )> }
753
+ token prefix :sym <+ > { <sym > <O (| % symbolic_unary , : op<numify >)> }
754
+ token prefix :sym <~ > { <sym > <O (| % symbolic_unary , : op<stringify >)> }
755
+ token prefix :sym <- > { <sym > <![ > ] > <!number > <O (| % symbolic_unary , : op<neg_n >)> }
756
+ token prefix :sym <? > { <sym > <O (| % symbolic_unary , : op<istrue >)> }
757
+ token prefix :sym <! > { <sym > <O (| % symbolic_unary , : op<falsey >)> }
758
+ token prefix :sym <| > { <sym > <O (| % symbolic_unary )> }
761
759
762
- token infix :sym <* > { <sym > <O (: inherit< %multiplicative > , : op<mul_n >)> }
763
- token infix :sym </ > { <sym > <O (: inherit< %multiplicative > , : op<div_n >)> }
764
- token infix :sym <% > { <sym > <O (: inherit< %multiplicative > , : op<mod_n >)> }
765
- token infix :sym <+& > { <sym > <O (: inherit< %multiplicative > , : op<bitand_i >)> }
760
+ token infix :sym <* > { <sym > <O (| % multiplicative , : op<mul_n >)> }
761
+ token infix :sym </ > { <sym > <O (| % multiplicative , : op<div_n >)> }
762
+ token infix :sym <% > { <sym > <O (| % multiplicative , : op<mod_n >)> }
763
+ token infix :sym <+& > { <sym > <O (| % multiplicative , : op<bitand_i >)> }
766
764
767
- token infix :sym <+ > { <sym > <O (: inherit< %additive > , : op<add_n >)> }
768
- token infix :sym <- > { <sym > <O (: inherit< %additive > , : op<sub_n >)> }
769
- token infix :sym <+| > { <sym > <O (: inherit< %additive > , : op<bitor_i >)> }
770
- token infix :sym <+^ > { <sym > <O (: inherit< %additive > , : op<bitxor_i >)> }
765
+ token infix :sym <+ > { <sym > <O (| % additive , : op<add_n >)> }
766
+ token infix :sym <- > { <sym > <O (| % additive , : op<sub_n >)> }
767
+ token infix :sym <+| > { <sym > <O (| % additive , : op<bitor_i >)> }
768
+ token infix :sym <+^ > { <sym > <O (| % additive , : op<bitxor_i >)> }
771
769
772
- token infix :sym <~ > { <sym > <O (: inherit< %concatenation > , : op<concat >)> }
770
+ token infix :sym <~ > { <sym > <O (| % concatenation , : op<concat >)> }
773
771
774
- token infix :sym «== » { <sym > <O (: inherit< %relational > , : op<iseq_n >)> }
775
- token infix :sym «!= » { <sym > <O (: inherit< %relational > , : op<isne_n >)> }
776
- token infix :sym «<= » { <sym > <O (: inherit< %relational > , : op<isle_n >)> }
777
- token infix :sym «>= » { <sym > <O (: inherit< %relational > , : op<isge_n >)> }
778
- token infix :sym «< » { <sym > <O (: inherit< %relational > , : op<islt_n >)> }
779
- token infix :sym «> » { <sym > <O (: inherit< %relational > , : op<isgt_n >)> }
780
- token infix :sym «eq » { <sym > <O (: inherit< %relational > , : op<iseq_s >)> }
781
- token infix :sym «ne » { <sym > <O (: inherit< %relational > , : op<isne_s >)> }
782
- token infix :sym «le » { <sym > <O (: inherit< %relational > , : op<isle_s >)> }
783
- token infix :sym «ge » { <sym > <O (: inherit< %relational > , : op<isge_s >)> }
784
- token infix :sym «lt » { <sym > <O (: inherit< %relational > , : op<islt_s >)> }
785
- token infix :sym «gt » { <sym > <O (: inherit< %relational > , : op<isgt_s >)> }
786
- token infix :sym «=:= » { <sym > <O (: inherit< %relational > , : op<eqaddr >)> }
787
- token infix :sym <~~ > { <sym > <O (: inherit< %relational > , : reducecheck<smartmatch >)> }
772
+ token infix :sym «== » { <sym > <O (| % relational , : op<iseq_n >)> }
773
+ token infix :sym «!= » { <sym > <O (| % relational , : op<isne_n >)> }
774
+ token infix :sym «<= » { <sym > <O (| % relational , : op<isle_n >)> }
775
+ token infix :sym «>= » { <sym > <O (| % relational , : op<isge_n >)> }
776
+ token infix :sym «< » { <sym > <O (| % relational , : op<islt_n >)> }
777
+ token infix :sym «> » { <sym > <O (| % relational , : op<isgt_n >)> }
778
+ token infix :sym «eq » { <sym > <O (| % relational , : op<iseq_s >)> }
779
+ token infix :sym «ne » { <sym > <O (| % relational , : op<isne_s >)> }
780
+ token infix :sym «le » { <sym > <O (| % relational , : op<isle_s >)> }
781
+ token infix :sym «ge » { <sym > <O (| % relational , : op<isge_s >)> }
782
+ token infix :sym «lt » { <sym > <O (| % relational , : op<islt_s >)> }
783
+ token infix :sym «gt » { <sym > <O (| % relational , : op<isgt_s >)> }
784
+ token infix :sym «=:= » { <sym > <O (| % relational , : op<eqaddr >)> }
785
+ token infix :sym <~~ > { <sym > <O (| % relational , : reducecheck<smartmatch >)> }
788
786
789
- token infix :sym <&& > { <sym > <O (: inherit< %tight_and > , : op<if >)> }
787
+ token infix :sym <&& > { <sym > <O (| % tight_and , : op<if >)> }
790
788
791
- token infix :sym <|| > { <sym > <O (: inherit< %tight_or > , : op<unless >)> }
792
- token infix :sym <// > { <sym > <O (: inherit< %tight_or > , : op<defor >)> }
789
+ token infix :sym <|| > { <sym > <O (| % tight_or , : op<unless >)> }
790
+ token infix :sym <// > { <sym > <O (| % tight_or , : op<defor >)> }
793
791
794
792
token infix :sym <?? !! > {
795
793
'??'
796
794
<.ws >
797
795
<EXPR (' i=' )>
798
796
'!!'
799
- <O (: inherit< %conditional > , : reducecheck<ternary >, : op<if >)>
797
+ <O (| % conditional , : reducecheck<ternary >, : op<if >)>
800
798
}
801
799
802
800
token infix :sym <= > {
803
801
<sym > <.panic : 'Assignment ("=") not supported in NQP, use ":=" instead' >
804
802
}
805
- token infix :sym <:= > { <sym > <O (: inherit< %assignment > , : op<bind >)> }
806
- token infix :sym <::= > { <sym > <O (: inherit< %assignment > , : op<bind >)> }
803
+ token infix :sym <:= > { <sym > <O (| % assignment , : op<bind >)> }
804
+ token infix :sym <::= > { <sym > <O (| % assignment , : op<bind >)> }
807
805
808
- token infix :sym <, > { <sym > <O (: inherit< %comma > , : op<list >)> }
806
+ token infix :sym <, > { <sym > <O (| % comma , : op<list >)> }
809
807
810
- token prefix :sym <make > { <sym > \s <O (: inherit< %list_prefix > )> }
808
+ token prefix :sym <make > { <sym > \s <O (| % list_prefix )> }
811
809
token term :sym <return > { <sym > [\s <EXPR >]? { $ * RETURN_USED := 1 } }
812
810
813
811
method smartmatch ($/ ) {
0 commit comments