diff options
| author | Simonas Kazlauskas <git@kazlauskas.me> | 2015-10-27 22:05:23 +0200 |
|---|---|---|
| committer | Simonas Kazlauskas <git@kazlauskas.me> | 2015-10-27 23:06:37 +0200 |
| commit | 99f9bb16ab83519d67deaf4ca8a78feeba67fb53 (patch) | |
| tree | 398f1f119503f98e6d69a0a4f72793c0125465d6 /src | |
| parent | c1a238c4f53145a2fe3820d869cbdaa26a128307 (diff) | |
| download | rust-99f9bb16ab83519d67deaf4ca8a78feeba67fb53.tar.gz rust-99f9bb16ab83519d67deaf4ca8a78feeba67fb53.zip | |
Adjust src/grammar for the introduced <- op
Diffstat (limited to 'src')
| -rw-r--r-- | src/grammar/RustLexer.g4 | 4 | ||||
| -rw-r--r-- | src/grammar/lexer.l | 1 | ||||
| -rw-r--r-- | src/grammar/parser-lalr.y | 9 | ||||
| -rw-r--r-- | src/grammar/verify.rs | 4 |
4 files changed, 14 insertions, 4 deletions
diff --git a/src/grammar/RustLexer.g4 b/src/grammar/RustLexer.g4 index 5c13295451c..a63fc59e50b 100644 --- a/src/grammar/RustLexer.g4 +++ b/src/grammar/RustLexer.g4 @@ -10,7 +10,7 @@ lexer grammar RustLexer; tokens { EQ, LT, LE, EQEQ, NE, GE, GT, ANDAND, OROR, NOT, TILDE, PLUS, MINUS, STAR, SLASH, PERCENT, CARET, AND, OR, SHL, SHR, BINOP, - BINOPEQ, AT, DOT, DOTDOT, DOTDOTDOT, COMMA, SEMI, COLON, + BINOPEQ, LARROW, AT, DOT, DOTDOT, DOTDOTDOT, COMMA, SEMI, COLON, MOD_SEP, RARROW, FAT_ARROW, LPAREN, RPAREN, LBRACKET, RBRACKET, LBRACE, RBRACE, POUND, DOLLAR, UNDERSCORE, LIT_CHAR, LIT_BYTE, LIT_INTEGER, LIT_FLOAT, LIT_STR, LIT_STR_RAW, LIT_BYTE_STR, @@ -44,6 +44,7 @@ AND : '&' ; OR : '|' ; SHL : '<<' ; SHR : '>>' ; +LARROW : '<-' ; BINOP : PLUS @@ -56,6 +57,7 @@ BINOP | OR | SHL | SHR + | LARROW ; BINOPEQ : BINOP EQ ; diff --git a/src/grammar/lexer.l b/src/grammar/lexer.l index dd7b1c74de7..77737c99496 100644 --- a/src/grammar/lexer.l +++ b/src/grammar/lexer.l @@ -317,6 +317,7 @@ r/# { <str>\\[^n\nrt\\\x27\x220] { return -1; } <str>(.|\n) { yymore(); } +\<- { return LARROW; } -\> { return RARROW; } - { return '-'; } -= { return MINUSEQ; } diff --git a/src/grammar/parser-lalr.y b/src/grammar/parser-lalr.y index 75d9d28242f..b310b2b3351 100644 --- a/src/grammar/parser-lalr.y +++ b/src/grammar/parser-lalr.y @@ -45,6 +45,7 @@ extern char *yytext; %token DOTDOTDOT %token MOD_SEP %token RARROW +%token LARROW %token FAT_ARROW %token LIT_BYTE %token LIT_CHAR @@ -167,7 +168,8 @@ extern char *yytext; // prefix_exprs %precedence RETURN -%left '=' SHLEQ SHREQ MINUSEQ ANDEQ OREQ PLUSEQ STAREQ SLASHEQ CARETEQ PERCENTEQ +%right '=' SHLEQ SHREQ MINUSEQ ANDEQ OREQ PLUSEQ STAREQ SLASHEQ CARETEQ PERCENTEQ +%right LARROW %left OROR %left ANDAND %left EQEQ NE @@ -1316,6 +1318,7 @@ nonblock_expr | RETURN expr { $$ = mk_node("ExprRet", 1, $2); } | BREAK { $$ = mk_node("ExprBreak", 0); } | BREAK lifetime { $$ = mk_node("ExprBreak", 1, $2); } +| nonblock_expr LARROW expr { $$ = mk_node("ExprInPlace", 2, $1, $3); } | nonblock_expr '=' expr { $$ = mk_node("ExprAssign", 2, $1, $3); } | nonblock_expr SHLEQ expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); } | nonblock_expr SHREQ expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); } @@ -1375,6 +1378,7 @@ expr | RETURN expr { $$ = mk_node("ExprRet", 1, $2); } | BREAK { $$ = mk_node("ExprBreak", 0); } | BREAK ident { $$ = mk_node("ExprBreak", 1, $2); } +| expr LARROW expr { $$ = mk_node("ExprInPlace", 2, $1, $3); } | expr '=' expr { $$ = mk_node("ExprAssign", 2, $1, $3); } | expr SHLEQ expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); } | expr SHREQ expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); } @@ -1435,6 +1439,7 @@ nonparen_expr | RETURN expr { $$ = mk_node("ExprRet", 1, $2); } | BREAK { $$ = mk_node("ExprBreak", 0); } | BREAK ident { $$ = mk_node("ExprBreak", 1, $2); } +| nonparen_expr LARROW nonparen_expr { $$ = mk_node("ExprInPlace", 2, $1, $3); } | nonparen_expr '=' nonparen_expr { $$ = mk_node("ExprAssign", 2, $1, $3); } | nonparen_expr SHLEQ nonparen_expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); } | nonparen_expr SHREQ nonparen_expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); } @@ -1495,6 +1500,7 @@ expr_nostruct | RETURN expr { $$ = mk_node("ExprRet", 1, $2); } | BREAK { $$ = mk_node("ExprBreak", 0); } | BREAK ident { $$ = mk_node("ExprBreak", 1, $2); } +| expr_nostruct LARROW expr_nostruct { $$ = mk_node("ExprInPlace", 2, $1, $3); } | expr_nostruct '=' expr_nostruct { $$ = mk_node("ExprAssign", 2, $1, $3); } | expr_nostruct SHLEQ expr_nostruct { $$ = mk_node("ExprAssignShl", 2, $1, $3); } | expr_nostruct SHREQ expr_nostruct { $$ = mk_node("ExprAssignShr", 2, $1, $3); } @@ -1794,6 +1800,7 @@ unpaired_token | GE { $$ = mk_atom(yytext); } | ANDAND { $$ = mk_atom(yytext); } | OROR { $$ = mk_atom(yytext); } +| LARROW { $$ = mk_atom(yytext); } | SHLEQ { $$ = mk_atom(yytext); } | SHREQ { $$ = mk_atom(yytext); } | MINUSEQ { $$ = mk_atom(yytext); } diff --git a/src/grammar/verify.rs b/src/grammar/verify.rs index b7714a7e3c5..fe9c5aaee4c 100644 --- a/src/grammar/verify.rs +++ b/src/grammar/verify.rs @@ -35,7 +35,7 @@ use syntax::parse::lexer::TokenAndSpan; fn parse_token_list(file: &str) -> HashMap<String, token::Token> { fn id() -> token::Token { - token::Ident(ast::Ident::with_empty_ctxt(Name(0))), token::Plain) + token::Ident(ast::Ident::with_empty_ctxt(Name(0)), token::Plain) } let mut res = HashMap::new(); @@ -208,7 +208,7 @@ fn parse_antlr_token(s: &str, tokens: &HashMap<String, token::Token>, surrogate_ token::Literal(token::ByteStr(..), n) => token::Literal(token::ByteStr(nm), n), token::Literal(token::ByteStrRaw(..), n) => token::Literal(token::ByteStrRaw(fix(content), count(content)), n), - token::Ident(..) => token::Ident(ast::Ident::with_empty_ctxt(nm)), + token::Ident(..) => token::Ident(ast::Ident::with_empty_ctxt(nm), token::ModName), token::Lifetime(..) => token::Lifetime(ast::Ident::with_empty_ctxt(nm)), ref t => t.clone() |
