summaryrefslogtreecommitdiff
path: root/bnf/rust_expr.y_tree.h
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2015-09-23 13:23:40 +0800
committerJohn Hodge <tpg@mutabah.net>2015-09-23 13:23:40 +0800
commitfd0c758bcc492f5b25550e7d4a5d67dc90eeba6a (patch)
tree85063399453a8a04647724fab4a764c92c85542d /bnf/rust_expr.y_tree.h
parent558ac2ad0ae0e9585f551525f98896cbe3a2a9b8 (diff)
downloadmrust-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.h112
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
+ ;