S-expressions: Difference between revisions
m
→JavaScript :: Functional: (disaggregated expression parser)
m (→{{header|Haskell}}: (disaggregated expression parser)) |
m (→JavaScript :: Functional: (disaggregated expression parser)) |
||
Line 3,789:
// parseExpr [String] -> ([Expr], [String])
const parseExpr = tokens =>
// A tuple of (parsed trees, residual tokens)
// derived from a list of tokens.
);▼
const readToken = ([exprs, tkns]) =>▼
0 < tkns.length ? (() => {▼
const [t, ...ts] = tkns;▼
// finished :: ([Expr], [String]) -> Bool
// Subforests are introduced by brackets,▼
return "(" === t ? (▼
0 === tkns.length || ")" ===
xs => exprs.concat([xs])▼
)(▼
tail▼
)(▼
parseExpr(ts)▼
)▼
// and conclude where brackets close.▼
) : ")" === t ? (▼
Tuple(exprs)(ts)▼
// readToken :: ([Expr], [String]) -> ([Expr], [String])
const readToken = ([exprs,
0 < tkns.length ?
const [t, ...ts] =
▲ );
// ------------------- ATOM PARSER -------------------
|