diff options
author | John Hodge <tpg@mutabah.net> | 2015-09-23 13:23:40 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2015-09-23 13:23:40 +0800 |
commit | fd0c758bcc492f5b25550e7d4a5d67dc90eeba6a (patch) | |
tree | 85063399453a8a04647724fab4a764c92c85542d /bnf/rust_expr.y_tree.h | |
parent | 558ac2ad0ae0e9585f551525f98896cbe3a2a9b8 (diff) | |
download | mrust-fd0c758bcc492f5b25550e7d4a5d67dc90eeba6a.tar.gz |
BNF - Extended grammar with struct literal hack
Diffstat (limited to 'bnf/rust_expr.y_tree.h')
-rw-r--r-- | bnf/rust_expr.y_tree.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/bnf/rust_expr.y_tree.h b/bnf/rust_expr.y_tree.h new file mode 100644 index 00000000..489cc08b --- /dev/null +++ b/bnf/rust_expr.y_tree.h @@ -0,0 +1,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 + ; |