S-expressions: Difference between revisions

m
(→‎{{header|Haskell}}: Added a variant which parses by hand and shows a parse tree diagram.)
Line 3,064:
<$> fst (parseExpr (tokenized expr))
 
------------------ PARSING- S-EXPRESSIONS PARSER -----------------
 
parseExpr :: [String] -> ([Tree Val], [String])
parseExpr = go
where
finished (_, []) = True
finished (_, ")" : _) = True
finished (_, _) = False
 
parseToken (trees, []) = (trees, [])
parseToken (trees, "(" : rest) =
Line 3,082 ⟶ 3,078:
parseToken (trees, t : rest) =
(trees <> [Node (atom t) []], rest)
 
finished (_, "rest)" := _null rest || ")" == head Truerest
 
go tokens = until finished parseToken ([], tokens)
 
---------------------- PARSING TOKENS PARSER ---------------------
 
atom :: String -> Val
9,655

edits