summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2015-09-26 19:28:49 +0800
committerJohn Hodge <tpg@mutabah.net>2015-09-26 19:28:49 +0800
commit0121cefaec3f14a5f35ac84321787e01849585e0 (patch)
tree3b1109d2be98b62703e673bfd4462839dc0abb79
parent29f62819ac26ea27c02a9ac8adbb6470fcd056a1 (diff)
downloadmrust-0121cefaec3f14a5f35ac84321787e01849585e0.tar.gz
Successfully parses libcore
-rw-r--r--bnf/main.cpp2
-rw-r--r--bnf/rust.lex3
-rw-r--r--bnf/rust.y6
-rw-r--r--bnf/rust_expr.y.h2
-rw-r--r--bnf/rust_expr.y_tree.h26
-rw-r--r--bnf/rust_tts.y.h2
6 files changed, 22 insertions, 19 deletions
diff --git a/bnf/main.cpp b/bnf/main.cpp
index 020ff0f6..37d84985 100644
--- a/bnf/main.cpp
+++ b/bnf/main.cpp
@@ -131,6 +131,8 @@ int main(int argc, char *argv[]) {
post_process_module(*mod, base_filename, base_path);
+ printf("Crate parsed\n");
+
return 0;
}
void yyerror(ParserContext& context, const char *s) {
diff --git a/bnf/rust.lex b/bnf/rust.lex
index 6d744485..1151aa32 100644
--- a/bnf/rust.lex
+++ b/bnf/rust.lex
@@ -32,7 +32,7 @@ void handle_block_comment();
dec_digit [0-9_]
ident_c [a-zA-Z_]
-int_suffix ([ui](size|8|16|32))?
+int_suffix ([ui](size|8|16|32|64))?
%%
@@ -96,6 +96,7 @@ int_suffix ([ui](size|8|16|32))?
"|=" { return PIPEEQUAL; }
"&=" { return AMPEQUAL; }
+"^=" { return CARETEQUAL; }
"&&" { return DOUBLEAMP; }
"||" { return DOUBLEPIPE; }
diff --git a/bnf/rust.y b/bnf/rust.y
index 20b81dec..f0fe11e4 100644
--- a/bnf/rust.y
+++ b/bnf/rust.y
@@ -25,7 +25,7 @@
%token HASHBANG
%token DOUBLECOLON THINARROW FATARROW DOUBLEDOT TRIPLEDOT
%token DOUBLEEQUAL EXCLAMEQUAL DOUBLEPIPE DOUBLEAMP
-%token PIPEEQUAL AMPEQUAL
+%token PIPEEQUAL AMPEQUAL CARETEQUAL
%token GTEQUAL LTEQUAL
%token PLUSEQUAL MINUSEQUAL STAREQUAL SLASHEQUAL PERCENTEQUAL
%token DOUBLELT DOUBLEGT DOUBLELTEQUAL DOUBLEGTEQUAL
@@ -125,7 +125,7 @@ opt_pub
| RWD_pub { $$ = true; bnf_trace(context, "public"); }
;
opt_comma: | ',';
-opt_semicolon: | ';';
+/*opt_semicolon: | ';';*/
opt_unsafe: | RWD_unsafe;
opt_lifetime: { $$ = nullptr; } | LIFETIME;
@@ -440,7 +440,7 @@ type_path_segs
type_path_seg
: IDENT
| IDENT type_args
- | IDENT type_args
+ /*| IDENT type_args*/
;
type_exprs: type_exprs ',' type_arg | type_arg;
type_arg: type | LIFETIME | IDENT '=' type;
diff --git a/bnf/rust_expr.y.h b/bnf/rust_expr.y.h
index 7b3494c8..9cb3621f 100644
--- a/bnf/rust_expr.y.h
+++ b/bnf/rust_expr.y.h
@@ -1,5 +1,5 @@
-assign_op: '=' | PLUSEQUAL | MINUSEQUAL | STAREQUAL | SLASHEQUAL | DOUBLELTEQUAL | DOUBLEGTEQUAL | PIPEEQUAL | AMPEQUAL;
+assign_op: '=' | PLUSEQUAL | MINUSEQUAL | STAREQUAL | SLASHEQUAL | DOUBLELTEQUAL | DOUBLEGTEQUAL | PIPEEQUAL | AMPEQUAL | CARETEQUAL;
closure_arg_list: | closure_arg_list_;
closure_arg_list_
diff --git a/bnf/rust_expr.y_tree.h b/bnf/rust_expr.y_tree.h
index 756e5e4a..0687790d 100644
--- a/bnf/rust_expr.y_tree.h
+++ b/bnf/rust_expr.y_tree.h
@@ -55,23 +55,23 @@ _(expr_8)
| _(expr_8) DOUBLEGT _(expr_9) {}
;
_(expr_9)
- : _(expr_cast)
- | _(expr_9) '+' _(expr_cast) {}
- | _(expr_9) '-' _(expr_cast) {}
+ : _(expr_10)
+ | _(expr_9) '+' _(expr_10) {}
+ | _(expr_9) '-' _(expr_10) {}
;
-/* 10: Cast */
+/* 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_11)
+ : _(expr_12)
| _(expr_cast) RWD_as type_ele { bnf_trace(context, "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)
diff --git a/bnf/rust_tts.y.h b/bnf/rust_tts.y.h
index dc930120..1cd84318 100644
--- a/bnf/rust_tts.y.h
+++ b/bnf/rust_tts.y.h
@@ -20,7 +20,7 @@ tt_tok
| _C('&') | _T(DOUBLEAMP) | _T(AMPEQUAL)
| _C('|') | _T(DOUBLEPIPE) | _T(PIPEEQUAL)
| _C(':') | _T(DOUBLECOLON)
- | _C('^')
+ | _C('^') | _T(CARETEQUAL)
| _C('=') | _T(DOUBLEEQUAL) | _T(FATARROW)
| _C('<') | _T(DOUBLELT) | _T(LTEQUAL) | _T(DOUBLELTEQUAL)
| _C('>') | _T(DOUBLEGT) | _T(GTEQUAL) | _T(DOUBLEGTEQUAL)