S-expressions: Difference between revisions

m
→‎{{header|Haskell}}: (disaggregated expression parser)
m (→‎Python :: Functional: (Disaggregated the expression parser))
m (→‎{{header|Haskell}}: (disaggregated expression parser))
Line 3,071:
parseExpr :: [String] -> (Val, [String])
parseExpr = until finished parseToken . (mempty,)
where
finished (_, []) = True
finished (_, token : _) = ")" == token
 
finished :: (Val, [String]) -> Bool
parseToken (v, "(" : rest) =
finished (_, []) = True
bimap
finished (_, token : _) = ")" == token
((v <>) . List . return)
 
tail
parseToken :: (Val, [String]) -> (Val, [String])
(parseExpr rest)
parseToken (v, ")(" : rest) = (v, rest)
bimap
parseToken (v, t : rest) = (v <> List [atom t], rest)
((v <>) . List . return)
tail
(parseExpr rest)
parseToken (v, "()" : rest) = (v, rest)
parseToken (v, t : rest) = (v <> List [atom t], rest)
 
----------------------- TOKEN PARSER ---------------------
9,655

edits