summaryrefslogtreecommitdiff
path: root/bnf/rust_expr.y_tree.h
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
 ;