// expr_stmt: expression_list // expression_list: expression ( "," expression )* [","] // assignment_stmt: (target_list "=")+ (expression_list | yield_expression) // augmented_assignment_stmt ::= target augop (expression_list | yield_expression) // augop: '+=' | '-=' | '*=' | '/=' | '%=' | '**=' | '>>=' | '<<=' | '&=' | '^=' | '|=' | '//=' private Statement ParseExprStmt() { Expression ret = ParseTestListAsExpr(); if (ret is ErrorExpression) { NextToken(); } if (PeekToken(TokenKind.Assign)) { return FinishAssignments(ret); } else { PythonOperator op = GetAssignOperator(PeekToken()); if (op != PythonOperator.None) { NextToken(); Expression rhs; if (MaybeEat(TokenKind.KeywordYield)) { rhs = ParseYieldExpression(); } else { rhs = ParseTestListAsExpr(); } string assignError = ret.CheckAugmentedAssign(); if (assignError != null) { ReportSyntaxError(assignError); } AugmentedAssignStatement aug = new AugmentedAssignStatement(op, ret, rhs); aug.SetLoc(_globalParent, ret.StartIndex, GetEnd()); return aug; } else { Statement stmt = new ExpressionStatement(ret); stmt.SetLoc(_globalParent, ret.IndexSpan); return stmt; } } }
// expr_stmt: expression_list // expression_list: expression ( "," expression )* [","] // assignment_stmt: (target_list "=")+ (expression_list | yield_expression) // augmented_assignment_stmt ::= target augop (expression_list | yield_expression) // augop: '+=' | '-=' | '*=' | '/=' | '%=' | '**=' | '>>=' | '<<=' | '&=' | '^=' | '|=' | '//=' private Statement ParseExprStmt() { Expression ret = ParseTestListAsExpr(false); if (ret is ErrorExpression) { NextToken(); } if (PeekToken(TokenKind.Assign)) { return FinishAssignments(ret); } else { PythonOperator op = GetAssignOperator(PeekToken()); if (op != PythonOperator.None) { NextToken(); Expression rhs; if (MaybeEat(TokenKind.KeywordYield)) { rhs = ParseYieldExpression(); } else { rhs = ParseTestListAsExpr(false); } if (ret is ListExpression || ret is TupleExpression) { ReportSyntaxError(ret.Start, ret.End, "illegal expression for augmented assignment"); } AugmentedAssignStatement aug = new AugmentedAssignStatement(op, ret, rhs); aug.SetLoc(ret.Start, GetEnd()); return aug; } else { Statement stmt = new ExpressionStatement(ret); stmt.SetLoc(ret.Span); return stmt; } } }