S-expressions: Difference between revisions

Content added Content deleted
m (→‎Python :: Functional: (Disaggregated the expression parser))
m (→‎{{header|Haskell}}: (disaggregated expression parser))
Line 3,071: Line 3,071:
parseExpr :: [String] -> (Val, [String])
parseExpr :: [String] -> (Val, [String])
parseExpr = until finished parseToken . (mempty,)
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)
parseToken (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 ---------------------
----------------------- TOKEN PARSER ---------------------