S-expressions: Difference between revisions
m
→Python :: Functional: (Disaggregated the expression parser)
m (→Python :: Functional: (factored out a helper function)) |
m (→Python :: Functional: (Disaggregated the expression parser)) |
||
Line 5,320:
unparsed tokens that remain.
'''
def finished(xr):▼
r = xr[1]▼
return (not r) or (r[0] == ")")▼
def parseToken(xsr):▼
xs, r = xsr▼
h, *t = r▼
if "(" == h:▼
expr, rest = parseExpr(t)▼
return xs + [expr], rest[1:]▼
else:▼
return (xs, t) if ")" == h else (▼
xs + [atom(h)], t▼
)▼
return until(finished)(parseToken)(
([], tokens)
)
# finished :: ([Expr], [String]) -> Bool
'''True if no tokens remain,
or the next token is a closing bracket.
'''
# parseToken :: ([Expr], [String]) -> ([Expr], [String])
'''A tuple of an expanded expression
and a reduced token list.
'''
# --------------------- ATOM PARSER ----------------------
|