Skip to content

Commit 99cdb41

Browse files
author
José Valim
committed
Give higher precedence to |> than =~
1 parent fce9750 commit 99cdb41

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

lib/elixir/src/elixir_parser.yrl

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Nonterminals
22
grammar expr_list
33
expr paren_expr block_expr fn_expr bracket_expr call_expr bracket_at_expr max_expr
44
base_expr matched_expr matched_op_expr unmatched_expr op_expr
5-
add_op mult_op unary_op two_op right_op bin_concat_op
5+
add_op mult_op unary_op two_op regex_op right_op bin_concat_op
66
match_op send_op default_op when_op pipe_op in_op inc_op range_op
77
andand_op oror_op and_op or_op comp_expr_op colon_colon_op three_op at_op
88
open_paren close_paren empty_paren
@@ -54,13 +54,14 @@ Left 140 or_op.
5454
Left 150 and_op.
5555
Left 160 comp_expr_op.
5656
Left 170 in_op.
57-
Right 180 right_op.
58-
Left 190 range_op.
59-
Left 200 three_op.
60-
Left 210 add_op.
61-
Left 220 mult_op.
62-
Right 230 bin_concat_op.
63-
Right 240 two_op.
57+
Right 180 regex_op.
58+
Right 190 right_op.
59+
Left 200 range_op.
60+
Left 210 three_op.
61+
Left 220 add_op.
62+
Left 230 mult_op.
63+
Right 240 bin_concat_op.
64+
Right 250 two_op.
6465
Nonassoc 300 unary_op.
6566
Left 310 dot_call_op.
6667
Left 310 dot_op.
@@ -103,6 +104,7 @@ op_expr -> match_op expr : { '$1', '$2' }.
103104
op_expr -> add_op expr : { '$1', '$2' }.
104105
op_expr -> mult_op expr : { '$1', '$2' }.
105106
op_expr -> two_op expr : { '$1', '$2' }.
107+
op_expr -> regex_op expr : { '$1', '$2' }.
106108
op_expr -> right_op expr : { '$1', '$2' }.
107109
op_expr -> andand_op expr : { '$1', '$2' }.
108110
op_expr -> three_op expr : { '$1', '$2' }.
@@ -124,6 +126,7 @@ matched_op_expr -> match_op matched_expr : { '$1', '$2' }.
124126
matched_op_expr -> add_op matched_expr : { '$1', '$2' }.
125127
matched_op_expr -> mult_op matched_expr : { '$1', '$2' }.
126128
matched_op_expr -> two_op matched_expr : { '$1', '$2' }.
129+
matched_op_expr -> regex_op matched_expr : { '$1', '$2' }.
127130
matched_op_expr -> right_op matched_expr : { '$1', '$2' }.
128131
matched_op_expr -> andand_op matched_expr : { '$1', '$2' }.
129132
matched_op_expr -> three_op matched_expr : { '$1', '$2' }.
@@ -272,8 +275,9 @@ two_op -> '--' eol : '$1'.
272275
two_op -> '**' : '$1'.
273276
two_op -> '**' eol : '$1'.
274277

275-
right_op -> '=~' : '$1'.
276-
right_op -> '=~' eol : '$1'.
278+
regex_op -> '=~' : '$1'.
279+
regex_op -> '=~' eol : '$1'.
280+
277281
right_op -> '|>' : '$1'.
278282
right_op -> '|>' eol : '$1'.
279283

lib/elixir/test/elixir/regex_test.exs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ defmodule Regex.BinaryTest do
88
assert Regex.match?(%r/^b$/m, "a\nb\nc")
99
end
1010

11+
test :precedence do
12+
assert { "aa", :unknown } |> elem(0) =~ %r/(a)\1/
13+
end
14+
1115
test :backreference do
1216
assert "aa" =~ %r/(a)\1/
1317
end

0 commit comments

Comments
 (0)