S-expressions: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: Added a variant which parses by hand and shows a parse tree diagram.) |
|||
Line 3,064: | Line 3,064: | ||
<$> fst (parseExpr (tokenized expr)) |
<$> fst (parseExpr (tokenized expr)) |
||
------------------ |
------------------- S-EXPRESSIONS PARSER ----------------- |
||
parseExpr :: [String] -> ([Tree Val], [String]) |
parseExpr :: [String] -> ([Tree Val], [String]) |
||
parseExpr = go |
parseExpr = go |
||
where |
where |
||
finished (_, []) = True |
|||
⚫ | |||
finished (_, _) = False |
|||
parseToken (trees, []) = (trees, []) |
parseToken (trees, []) = (trees, []) |
||
parseToken (trees, "(" : rest) = |
parseToken (trees, "(" : rest) = |
||
Line 3,082: | Line 3,078: | ||
parseToken (trees, t : rest) = |
parseToken (trees, t : rest) = |
||
(trees <> [Node (atom t) []], rest) |
(trees <> [Node (atom t) []], rest) |
||
⚫ | |||
go tokens = until finished parseToken ([], tokens) |
go tokens = until finished parseToken ([], tokens) |
||
---------------------- |
---------------------- TOKENS PARSER --------------------- |
||
atom :: String -> Val |
atom :: String -> Val |