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