docs: function parseAssignmentExpression() {
          var token, expr, right, list, startToken;
  
          startToken = lookahead;
          token = lookahead;
  
          if (!state.allowYield && matchKeyword('yield')) {
              return parseYieldExpression();
          }
  
          expr = parseConditionalExpression();
  
          if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {
              isAssignmentTarget = isBindingElement = false;
              list = reinterpretAsCoverFormalsList(expr);
  
              if (list) {
                  firstCoverInitializedNameError = null;
                  return parseArrowFunctionExpression(list, new WrappingNode(startToken));
              }
  
              return expr;
          }
  
          if (matchAssign()) {
              if (!isAssignmentTarget) {
                  tolerateError(Messages.InvalidLHSInAssignment);
              }
  
              // ECMA-262 12.1.1
              if (strict && expr.type === Syntax.Identifier) {
                  if (isRestrictedWord(expr.name)) {
                      tolerateUnexpectedToken(token, Messages.StrictLHSAssignment);
                  }
                  if (isStrictModeReservedWord(expr.name)) {
                      tolerateUnexpectedToken(token, Messages.StrictReservedWord);
                  }
              }
  
              if (!match('=')) {
                  isAssignmentTarget = isBindingElement = false;
              } else {
                  reinterpretExpressionAsPattern(expr);
              }
  
              token = lex();
              right = isolateCoverGrammar(parseAssignmentExpression);
              expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);
              firstCoverInitializedNameError = null;
          }
  
          return expr;
      }