summaryrefslogtreecommitdiff
path: root/bnf/rust_expr.y_tree.h
blob: ec019884e076ee22f97ec0eeb73166cb376d3b66 (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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
_(expr_noblock): _(expr_assign);

_(expr_assign)
 : _(expr_0)
 | _(expr_0) assign_op _(expr_assign)
 ;

_(expr_0): _(expr_range);

_(expr_range)
 : _(expr_range_n)
 | _(expr_range_n) DOUBLEDOT
 | _(expr_range_n) DOUBLEDOT _(expr_range_n)
 |                 DOUBLEDOT _(expr_range_n)
 | DOUBLEDOT
 ;
_(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_10)
 | _(expr_9) '+' _(expr_10) {}
 | _(expr_9) '-' _(expr_10) {}
 ;
/* 10: Times/Div/Modulo */
_(expr_10)
 : _(expr_10n)
 | _(expr_10) '*' _(expr_10n) {}
 | _(expr_10) '/' _(expr_10n) {}
 | _(expr_10) '%' _(expr_10n) {}
 ;
_(expr_10n): _(expr_cast);
/* 11: Cast */
_(expr_cast)
 : _(expr_12)
 | _(expr_cast) RWD_as type_ele { bnf_trace(context, "expr:cast"); }
 ;
_(expr_12)
 : _(expr_fc)
 | '-' _(expr_12)
 | '!' _(expr_12)
 | '*' _(expr_12)
/* | RWD_box expr_12 */
 | '&' _(expr_12)
 | '&' block /*HACK*/
 | '&' RWD_mut _(expr_12)
 | DOUBLEAMP _(expr_12) { }
 | DOUBLEAMP RWD_mut _(expr_12) { }
 | RWD_box _(expr)
 ;

_(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 opt_comma ')'	{ bnf_trace(context, "function call"); }
#ifndef SUFFIX_is__NOSTRLIT
 | expr_path '{' struct_literal_list '}'	{ bnf_trace(context, "struct literal"); }
 | expr_path '{' struct_literal_list ',' '}'	{ bnf_trace(context, "struct literal"); }
 | expr_path '{' struct_literal_list ',' DOUBLEDOT expr_0 '}'	{ bnf_trace(context, "struct literal (with default)"); }
#endif
 | expr_path
 | RWD_self
 | '(' expr ')'
#ifndef SUFFIX_is__NOBRACE
//| block
#endif
 | '(' ')'
 | '(' expr ',' expr_list ')'
 | '[' ']'
 | '[' expr ']'
 | '[' expr ',' ']'
 | '[' expr ',' expr_list_p opt_comma ']'
 | '[' expr ';' expr ']'
 | MACRO tt_paren	{ bnf_trace(context, "Expr macro invocation"); }
 | MACRO tt_square	{ bnf_trace(context, "Expr macro invocation"); }
 | _(closure)
 | RWD_move _(closure)
 ;
_(closure)
 : '|' closure_arg_list '|' closure_ret expr
 | DOUBLEPIPE closure_ret expr
 ;