Part 1 - The Reader
Problem 2
Specs: https://inst.eecs.berkeley.edu/~cs61a/su19/proj/scheme/#problem-2-3-pt
scheme_read
:
If the current token is the string
"nil"
, return thenil
object.If the current token is
(
, the expression is a pair or list. Callread_tail
on the rest ofsrc
and return its result.If the current token is
'
,`
, or,
the rest of the buffer should be processed as aquote
,quasiquote
, orunquote
expression, respectively. You don't have to worry about this until Problem 7.If the next token is not a delimiter, then it must be a primitive expression. Return it. (provided)
If none of the above cases apply, raise an error. (provided)
read_tail
:
If there are no more tokens, then the list is missing a close parenthesis and we should raise an error. (provided)
If the token is
)
, then we've reached the end of the list or pair. Remove this token from the buffer and return thenil
object.If none of the above cases apply, the next token is the operator in a combination, e.g. src contains
+ 2 3)
. To parse this:Read the next complete expression in the buffer. (Hint: Which function can we use to read a complete expression and remove it from the buffer?)
Read the rest of the combination until the matching closing parenthesis. (Hint: Which function can we use to read the rest of a list and remove it from the buffer?)
Return the results as a
Pair
instance, where the first element is the next complete expression and the second element is the rest of the combination.
Solution:
edit scheme_read,
adding:
edit read_tail, adding:
Last updated