Parse the rest of an expression.
(parse-expression-rest prev-expr prev-span parstate) → (mv erp expr span new-parstate)
This completes the job started by parse-expression: see that function's documentation first. In order to properly construct the final expression, given that the comma operator is left-associative, this recursive function takes the previous expression (and span) as input; the initial one comes from parse-expression.
If we reach the end of file or a token that is not a comma, it means that the expression is complete. we unread the token if one was read (i.e. if we did not reach the end of file), and we just return the expression (and its span) passed as input: we do not need to create another comma expression. If instead there is a comma token, we read the assignment expression after that, and we form a comma expression consisting of the one passed as input and the one just parsed: this is the new current expression, which we pass to the recursive call of this function. Spans are joined similarly.