Skip to content

Commit 99f9bb1

Browse files
committed
Adjust src/grammar for the introduced <- op
1 parent c1a238c commit 99f9bb1

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

src/grammar/RustLexer.g4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ lexer grammar RustLexer;
1010
tokens {
1111
EQ, LT, LE, EQEQ, NE, GE, GT, ANDAND, OROR, NOT, TILDE, PLUS,
1212
MINUS, STAR, SLASH, PERCENT, CARET, AND, OR, SHL, SHR, BINOP,
13-
BINOPEQ, AT, DOT, DOTDOT, DOTDOTDOT, COMMA, SEMI, COLON,
13+
BINOPEQ, LARROW, AT, DOT, DOTDOT, DOTDOTDOT, COMMA, SEMI, COLON,
1414
MOD_SEP, RARROW, FAT_ARROW, LPAREN, RPAREN, LBRACKET, RBRACKET,
1515
LBRACE, RBRACE, POUND, DOLLAR, UNDERSCORE, LIT_CHAR, LIT_BYTE,
1616
LIT_INTEGER, LIT_FLOAT, LIT_STR, LIT_STR_RAW, LIT_BYTE_STR,
@@ -44,6 +44,7 @@ AND : '&' ;
4444
OR : '|' ;
4545
SHL : '<<' ;
4646
SHR : '>>' ;
47+
LARROW : '<-' ;
4748

4849
BINOP
4950
: PLUS
@@ -56,6 +57,7 @@ BINOP
5657
| OR
5758
| SHL
5859
| SHR
60+
| LARROW
5961
;
6062

6163
BINOPEQ : BINOP EQ ;

src/grammar/lexer.l

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ r/# {
317317
<str>\\[^n\nrt\\\x27\x220] { return -1; }
318318
<str>(.|\n) { yymore(); }
319319

320+
\<- { return LARROW; }
320321
-\> { return RARROW; }
321322
- { return '-'; }
322323
-= { return MINUSEQ; }

src/grammar/parser-lalr.y

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ extern char *yytext;
4545
%token DOTDOTDOT
4646
%token MOD_SEP
4747
%token RARROW
48+
%token LARROW
4849
%token FAT_ARROW
4950
%token LIT_BYTE
5051
%token LIT_CHAR
@@ -167,7 +168,8 @@ extern char *yytext;
167168
// prefix_exprs
168169
%precedence RETURN
169170
170-
%left '=' SHLEQ SHREQ MINUSEQ ANDEQ OREQ PLUSEQ STAREQ SLASHEQ CARETEQ PERCENTEQ
171+
%right '=' SHLEQ SHREQ MINUSEQ ANDEQ OREQ PLUSEQ STAREQ SLASHEQ CARETEQ PERCENTEQ
172+
%right LARROW
171173
%left OROR
172174
%left ANDAND
173175
%left EQEQ NE
@@ -1316,6 +1318,7 @@ nonblock_expr
13161318
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
13171319
| BREAK { $$ = mk_node("ExprBreak", 0); }
13181320
| BREAK lifetime { $$ = mk_node("ExprBreak", 1, $2); }
1321+
| nonblock_expr LARROW expr { $$ = mk_node("ExprInPlace", 2, $1, $3); }
13191322
| nonblock_expr '=' expr { $$ = mk_node("ExprAssign", 2, $1, $3); }
13201323
| nonblock_expr SHLEQ expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
13211324
| nonblock_expr SHREQ expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1375,6 +1378,7 @@ expr
13751378
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
13761379
| BREAK { $$ = mk_node("ExprBreak", 0); }
13771380
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1381+
| expr LARROW expr { $$ = mk_node("ExprInPlace", 2, $1, $3); }
13781382
| expr '=' expr { $$ = mk_node("ExprAssign", 2, $1, $3); }
13791383
| expr SHLEQ expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
13801384
| expr SHREQ expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1435,6 +1439,7 @@ nonparen_expr
14351439
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
14361440
| BREAK { $$ = mk_node("ExprBreak", 0); }
14371441
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1442+
| nonparen_expr LARROW nonparen_expr { $$ = mk_node("ExprInPlace", 2, $1, $3); }
14381443
| nonparen_expr '=' nonparen_expr { $$ = mk_node("ExprAssign", 2, $1, $3); }
14391444
| nonparen_expr SHLEQ nonparen_expr { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
14401445
| nonparen_expr SHREQ nonparen_expr { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1495,6 +1500,7 @@ expr_nostruct
14951500
| RETURN expr { $$ = mk_node("ExprRet", 1, $2); }
14961501
| BREAK { $$ = mk_node("ExprBreak", 0); }
14971502
| BREAK ident { $$ = mk_node("ExprBreak", 1, $2); }
1503+
| expr_nostruct LARROW expr_nostruct { $$ = mk_node("ExprInPlace", 2, $1, $3); }
14981504
| expr_nostruct '=' expr_nostruct { $$ = mk_node("ExprAssign", 2, $1, $3); }
14991505
| expr_nostruct SHLEQ expr_nostruct { $$ = mk_node("ExprAssignShl", 2, $1, $3); }
15001506
| expr_nostruct SHREQ expr_nostruct { $$ = mk_node("ExprAssignShr", 2, $1, $3); }
@@ -1794,6 +1800,7 @@ unpaired_token
17941800
| GE { $$ = mk_atom(yytext); }
17951801
| ANDAND { $$ = mk_atom(yytext); }
17961802
| OROR { $$ = mk_atom(yytext); }
1803+
| LARROW { $$ = mk_atom(yytext); }
17971804
| SHLEQ { $$ = mk_atom(yytext); }
17981805
| SHREQ { $$ = mk_atom(yytext); }
17991806
| MINUSEQ { $$ = mk_atom(yytext); }

src/grammar/verify.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use syntax::parse::lexer::TokenAndSpan;
3535

3636
fn parse_token_list(file: &str) -> HashMap<String, token::Token> {
3737
fn id() -> token::Token {
38-
token::Ident(ast::Ident::with_empty_ctxt(Name(0))), token::Plain)
38+
token::Ident(ast::Ident::with_empty_ctxt(Name(0)), token::Plain)
3939
}
4040

4141
let mut res = HashMap::new();
@@ -208,7 +208,7 @@ fn parse_antlr_token(s: &str, tokens: &HashMap<String, token::Token>, surrogate_
208208
token::Literal(token::ByteStr(..), n) => token::Literal(token::ByteStr(nm), n),
209209
token::Literal(token::ByteStrRaw(..), n) => token::Literal(token::ByteStrRaw(fix(content),
210210
count(content)), n),
211-
token::Ident(..) => token::Ident(ast::Ident::with_empty_ctxt(nm)),
211+
token::Ident(..) => token::Ident(ast::Ident::with_empty_ctxt(nm),
212212
token::ModName),
213213
token::Lifetime(..) => token::Lifetime(ast::Ident::with_empty_ctxt(nm)),
214214
ref t => t.clone()

0 commit comments

Comments
 (0)