Skip to content

Commit a090b63

Browse files
authored
Merge pull request #324 from BenPH/missing-operators
Add missing operators and fix precedences
2 parents b00c569 + dc16d1e commit a090b63

File tree

1 file changed

+51
-42
lines changed

1 file changed

+51
-42
lines changed

src/components/operators.jl

Lines changed: 51 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ isunaryop(op::EXPR) = isoperator(op) && ((valof(op) == "<:" ||
6161
valof(op) == "::" ||
6262
valof(op) == "\$" ||
6363
valof(op) == ":" ||
64-
valof(op) == "") ||
64+
valof(op) == "" ||
65+
valof(op) == "±" ||
66+
valof(op) == "") ||
6567
(length(valof(op)) == 2 && valof(op)[1] == '.' && (valof(op)[2] == '+' ||
6668
valof(op)[2] == '-' ||
6769
valof(op)[2] == '!' ||
@@ -70,7 +72,9 @@ isunaryop(op::EXPR) = isoperator(op) && ((valof(op) == "<:" ||
7072
valof(op)[2] == '' ||
7173
valof(op)[2] == '' ||
7274
valof(op)[2] == '' ||
73-
valof(op)[2] == '')))
75+
valof(op)[2] == '' ||
76+
valof(op)[2] == '±' ||
77+
valof(op)[2] == '')))
7478
isunaryop(t::AbstractToken) = isunaryop(kindof(t))
7579
@static if VERSION < v"1.2.0"
7680
isunaryop(kind::Tokens.Kind) = kind === Tokens.ISSUBTYPE ||
@@ -484,7 +488,7 @@ comp_prec(op::String) = get(AllPrecs, op, 0) === ComparisonOp || (length(op) > 1
484488
# Which ops have different precend when dotted?
485489
# [op for op in Symbol.(keys(CSTParser.AllPrecs)) if Base.isoperator(op) && Base.isoperator(Symbol(".", op)) && Base.operator_precedence(op) !== Base.operator_precedence(Symbol(".", op))]
486490

487-
get_prec(op) = AllPrecs[maybe_strip_suffix(op)]
491+
get_prec(op) = get(AllPrecs, maybe_strip_suffix(op), 0)
488492

489493
function maybe_strip_suffix(op::String)
490494
for (i, c) in enumerate(op)
@@ -500,13 +504,13 @@ const AllPrecs = Dict(
500504
"" => ArrowOp,
501505
"<:" => ComparisonOp,
502506
"" => ComparisonOp,
503-
"" => 0,
507+
"" => ArrowOp,
504508
"" => ComparisonOp,
505509
"" => ComparisonOp,
506510
"" => ComparisonOp,
507511
"" => ComparisonOp,
508-
"" => 0,
509-
"" => 0,
512+
"" => ArrowOp,
513+
"" => ArrowOp,
510514
"" => ComparisonOp,
511515
"" => ComparisonOp,
512516
"//" => RationalOp,
@@ -528,23 +532,24 @@ const AllPrecs = Dict(
528532
"" => ComparisonOp,
529533
"" => TimesOp,
530534
"" => ArrowOp,
531-
"" => 0,
535+
"" => ArrowOp,
532536
"" => TimesOp,
533537
"" => ComparisonOp,
534538
"" => ComparisonOp,
535539
"" => ArrowOp,
536540
"" => PowerOp,
537541
"" => PlusOp,
538542
"" => ComparisonOp,
539-
"" => 0,
543+
"" => ArrowOp,
540544
"" => ArrowOp,
541545
"" => ComparisonOp,
542546
"" => ComparisonOp,
543-
"" => 0,
547+
"" => TimesOp,
544548
"" => ComparisonOp,
545549
"" => ArrowOp,
546550
"" => PlusOp,
547551
"-" => PlusOp,
552+
"" => PlusOp,
548553
"" => ComparisonOp,
549554
"" => PowerOp,
550555
"+=" => AssignmentOp,
@@ -584,17 +589,17 @@ const AllPrecs = Dict(
584589
"" => ComparisonOp,
585590
"" => ComparisonOp,
586591
"" => PlusOp,
587-
"" => 0,
592+
"" => ArrowOp,
588593
"" => ArrowOp,
589594
"" => ComparisonOp,
590-
"" => 0,
595+
"" => ArrowOp,
591596
"" => ComparisonOp,
592597
"" => PlusOp,
593598
"" => ComparisonOp,
594599
"" => ComparisonOp,
595600
"" => TimesOp,
596601
"" => ComparisonOp,
597-
"" => 0,
602+
"" => ArrowOp,
598603
"" => ArrowOp,
599604
"" => ComparisonOp,
600605
"" => TimesOp,
@@ -637,7 +642,7 @@ const AllPrecs = Dict(
637642
"" => ArrowOp,
638643
"" => ComparisonOp,
639644
"" => ComparisonOp,
640-
"" => 0,
645+
"" => ArrowOp,
641646
"&" => TimesOp,
642647
"" => ComparisonOp,
643648
"" => ArrowOp,
@@ -650,7 +655,7 @@ const AllPrecs = Dict(
650655
"" => ComparisonOp,
651656
"=" => AssignmentOp,
652657
"" => TimesOp,
653-
"" => 0,
658+
"" => ArrowOp,
654659
"" => ComparisonOp,
655660
"" => ArrowOp,
656661
"" => ComparisonOp,
@@ -666,11 +671,11 @@ const AllPrecs = Dict(
666671
"" => ArrowOp,
667672
"" => PlusOp,
668673
"" => TimesOp,
669-
"" => 0,
674+
"" => ArrowOp,
670675
"" => ComparisonOp,
671676
"" => ColonOp,
672677
"" => ComparisonOp,
673-
"" => 0,
678+
"" => ArrowOp,
674679
"" => ComparisonOp,
675680
"" => PlusOp,
676681
"" => ArrowOp,
@@ -710,7 +715,7 @@ const AllPrecs = Dict(
710715
"" => ComparisonOp,
711716
"" => ComparisonOp,
712717
"" => ComparisonOp,
713-
"" => 0,
718+
"" => ArrowOp,
714719
"" => ArrowOp,
715720
"" => ArrowOp,
716721
"" => PlusOp,
@@ -733,7 +738,7 @@ const AllPrecs = Dict(
733738
"//=" => AssignmentOp,
734739
"" => ComparisonOp,
735740
"" => ComparisonOp,
736-
"" => 0,
741+
"" => ArrowOp,
737742
"" => TimesOp,
738743
"" => ComparisonOp,
739744
"" => ComparisonOp,
@@ -782,14 +787,14 @@ const AllPrecs = Dict(
782787
"" => TimesOp,
783788
"" => ArrowOp,
784789
"" => PowerOp,
785-
"" => ComparisonOp,
790+
"" => AssignmentOp,
786791
"" => ArrowOp,
787792
"" => TimesOp,
788793
"" => PlusOp,
789794
"" => ArrowOp,
790-
"" => 0,
795+
"" => ArrowOp,
791796
"<<=" => AssignmentOp,
792-
"" => ComparisonOp,
797+
"" => AssignmentOp,
793798
"" => TimesOp,
794799
"" => ComparisonOp,
795800
"" => ComparisonOp,
@@ -814,7 +819,7 @@ const AllPrecs = Dict(
814819
"" => ComparisonOp,
815820
"" => ArrowOp,
816821
"" => ComparisonOp,
817-
"" => 0,
822+
"" => ArrowOp,
818823
"" => TimesOp,
819824
"" => ComparisonOp,
820825
"" => TimesOp,
@@ -829,13 +834,12 @@ const AllPrecs = Dict(
829834
"" => ComparisonOp,
830835
"" => ComparisonOp,
831836
"" => ArrowOp,
832-
"|++|" => PlusOp,
833-
"" => 0,
837+
"" => ArrowOp,
834838
"" => ArrowOp,
835839
"" => PlusOp,
836840
"" => TimesOp,
837841
"" => PowerOp,
838-
"" => 0,
842+
"" => ArrowOp,
839843
"" => ComparisonOp,
840844
"" => ArrowOp,
841845
"" => TimesOp,
@@ -851,7 +855,7 @@ const AllPrecs = Dict(
851855
"" => PowerOp,
852856
"" => ComparisonOp,
853857
"" => ComparisonOp,
854-
"" => ComparisonOp,
858+
"" => AssignmentOp,
855859
"" => ArrowOp,
856860
"" => ArrowOp,
857861
">>>" => BitShiftOp,
@@ -905,15 +909,15 @@ const AllPrecs = Dict(
905909
"" => ComparisonOp,
906910
"" => PlusOp,
907911
"" => ArrowOp,
908-
"" => 0,
912+
"" => ArrowOp,
909913
"" => TimesOp,
910914
"in" => ComparisonOp,
911915
"==" => ComparisonOp,
912916
"" => ArrowOp,
913917
"" => ArrowOp,
914918
":=" => AssignmentOp,
915919
"" => ComparisonOp,
916-
"" => PlusOp,
920+
"" => ComparisonOp,
917921
"<|" => PipeOp,
918922
"" => ArrowOp,
919923
"" => ComparisonOp,
@@ -926,14 +930,15 @@ const AllPrecs = Dict(
926930
"" => TimesOp,
927931
"" => ArrowOp,
928932
".." => ColonOp,
929-
"" => 0,
933+
"" => ArrowOp,
930934
"⪿" => ComparisonOp,
931935
"" => ComparisonOp,
932936
"" => ColonOp,
933937
"" => ArrowOp,
934938
"" => ArrowOp,
935939
"" => PowerOp,
936940
"-=" => AssignmentOp,
941+
"−=" => AssignmentOp,
937942
"<" => ComparisonOp,
938943
"" => ComparisonOp,
939944
"" => ArrowOp,
@@ -953,7 +958,7 @@ const AllPrecs = Dict(
953958
"" => ComparisonOp,
954959
"" => PlusOp,
955960
"" => ComparisonOp,
956-
"" => 0,
961+
"" => ArrowOp,
957962
"" => TimesOp,
958963
"" => ComparisonOp,
959964
"" => ArrowOp,
@@ -966,7 +971,7 @@ const AllPrecs = Dict(
966971
"" => ComparisonOp,
967972
"" => TimesOp,
968973
"" => ComparisonOp,
969-
"" => 0,
974+
"" => ArrowOp,
970975
"" => ComparisonOp,
971976
"" => ComparisonOp,
972977
"" => ArrowOp,
@@ -975,7 +980,7 @@ const AllPrecs = Dict(
975980
"<<" => BitShiftOp,
976981
"" => ComparisonOp,
977982
"" => TimesOp,
978-
"" => 0,
983+
"" => ArrowOp,
979984
"" => TimesOp,
980985
"" => ComparisonOp,
981986
"" => ComparisonOp,
@@ -1001,8 +1006,7 @@ const AllPrecs = Dict(
10011006
"" => ComparisonOp,
10021007
"&=" => AssignmentOp,
10031008
"" => ComparisonOp,
1004-
"\\\\=" => TimesOp,
1005-
"" => 0,
1009+
"" => ArrowOp,
10061010
"" => ArrowOp,
10071011
"" => TimesOp,
10081012
"" => ComparisonOp,
@@ -1052,6 +1056,7 @@ const AllPrecs = Dict(
10521056
"" => ComparisonOp,
10531057
"" => ComparisonOp,
10541058
"" => TimesOp,
1059+
"·" => TimesOp,
10551060
"" => TimesOp,
10561061
"" => PowerOp,
10571062
"" => PlusOp,
@@ -1097,11 +1102,11 @@ const AllPrecs = Dict(
10971102
"" => ArrowOp,
10981103
"" => ArrowOp,
10991104
"" => ComparisonOp,
1100-
"" => 0,
1105+
"" => ArrowOp,
11011106
"" => ArrowOp,
11021107
"" => ComparisonOp,
1103-
"" => 0,
1104-
"" => 0,
1108+
"" => ArrowOp,
1109+
"" => ArrowOp,
11051110
"" => TimesOp,
11061111
"&&" => LazyAndOp,
11071112
"" => TimesOp,
@@ -1111,12 +1116,12 @@ const AllPrecs = Dict(
11111116
"" => ArrowOp,
11121117
"" => ComparisonOp,
11131118
"" => ArrowOp,
1114-
"" => 0,
1119+
"" => ArrowOp,
11151120
":" => ColonOp,
1116-
"" => 0,
1121+
"" => ArrowOp,
11171122
"" => ComparisonOp,
11181123
"" => ArrowOp,
1119-
"" => 0,
1124+
"" => ArrowOp,
11201125
"" => ComparisonOp,
11211126
"" => ArrowOp,
11221127
"" => ComparisonOp,
@@ -1127,7 +1132,7 @@ const AllPrecs = Dict(
11271132
"" => ComparisonOp,
11281133
"" => TimesOp,
11291134
"" => TimesOp,
1130-
"" => 0,
1135+
"" => ArrowOp,
11311136
"" => ComparisonOp,
11321137
"" => ComparisonOp,
11331138
"|" => PlusOp,
@@ -1148,5 +1153,9 @@ const AllPrecs = Dict(
11481153
"" => 0,
11491154
"" => 0,
11501155
"++" => PlusOp,
1151-
"¬" => 0
1156+
"¬" => 0,
1157+
"¦" => PlusOp,
1158+
"" => TimesOp,
1159+
"" => ComparisonOp,
1160+
"" => ComparisonOp
11521161
)

0 commit comments

Comments
 (0)