blob: 489cc08be4a1221bdf1e5521a9429522eb08c8d7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
_(expr): _(expr_assign);
_(expr_assign)
: _(expr_0) assign_op _(expr_0)
| _(expr_0)
;
_(expr_0): _(expr_range);
_(expr_range)
: _(expr_range_n)
| _(expr_range_n) DOUBLEDOT
| DOUBLEDOT _(expr_range_n)
| _(expr_range_n) DOUBLEDOT _(expr_range_n)
;
_(expr_range_n): _(expr_bor);
_(expr_bor)
: _(expr_band)
| _(expr_bor) DOUBLEPIPE _(expr_band) { }
;
_(expr_band)
: _(expr_equ)
| _(expr_band) DOUBLEAMP _(expr_equ) { }
;
_(expr_equ)
: _(expr_cmp)
| _(expr_equ) DOUBLEEQUAL _(expr_cmp)
| _(expr_equ) EXCLAMEQUAL _(expr_cmp)
;
_(expr_cmp)
: _(expr_cmp_n)
| _(expr_cmp) '<' _(expr_cmp_n) {}
| _(expr_cmp) '>' _(expr_cmp_n) {}
| _(expr_cmp) GTEQUAL _(expr_cmp_n) {}
| _(expr_cmp) LTEQUAL _(expr_cmp_n) {}
;
_(expr_cmp_n): _(expr_or);
_(expr_or)
: _(expr_and)
| _(expr_or) '|' _(expr_and) { }
;
_(expr_and)
: _(expr_xor)
| _(expr_and) '&' _(expr_xor) { }
;
_(expr_xor)
: _(expr_8)
| _(expr_xor) '^' _(expr_8) { }
;
_(expr_8)
: _(expr_9)
| _(expr_8) DOUBLELT _(expr_9) {}
| _(expr_8) DOUBLEGT _(expr_9) {}
;
_(expr_9)
: _(expr_cast)
| _(expr_9) '+' _(expr_cast) {}
| _(expr_9) '-' _(expr_cast) {}
;
/* 10: Cast */
_(expr_cast)
: _(expr_11)
| _(expr_cast) RWD_as type { bnf_trace("expr:cast"); }
;
/* 11: Times/Div/Modulo */
_(expr_11)
: _(expr_11n)
| _(expr_11) '*' _(expr_11n) {}
| _(expr_11) '/' _(expr_11n) {}
| _(expr_11) '%' _(expr_11n) {}
;
_(expr_11n): _(expr_12);
_(expr_12)
: _(expr_fc)
| '-' _(expr_12)
| '!' _(expr_12)
| '*' _(expr_12)
/* | RWD_box expr_12 */
| '&' _(expr_12)
| '&' RWD_mut _(expr_12)
| DOUBLEAMP _(expr_12) { }
| DOUBLEAMP RWD_mut _(expr_12) { }
;
_(expr_fc)
: _(expr_value)
| _(expr_fc) '(' expr_list ')'
| _(expr_fc) '[' expr ']'
| _(expr_fc) '.' INTEGER
| _(expr_fc) '.' expr_path_seg '(' expr_list ')'
| _(expr_fc) '.' expr_path_seg
_(expr_value)
: CHARLIT | INTEGER | FLOAT | STRING
| expr_blocks
| expr_path '(' expr_list ')' { bnf_trace("function call"); }
#ifndef SUFFIX_is__NOSTRLIT
| expr_path '{' struct_literal_list '}'
| expr_path '{' struct_literal_list ',' '}'
| expr_path '{' struct_literal_list ',' DOUBLEDOT expr_0 '}'
#endif
| expr_path
| RWD_self
| '(' expr ')'
| '(' ')'
| '(' expr ',' expr_list ')'
| MACRO tt_paren { bnf_trace("Expr macro invocation"); }
| '|' pattern_list '|' expr
| DOUBLEPIPE expr
;
|