]> git.rmz.io Git - my-scheme.git/blobdiff - app/Main.hs
Add various escape chars
[my-scheme.git] / app / Main.hs
index cea4c9b2f5e9f08230d49f837338d1e9cce484a7..533d260b5c65528c845334d06ab704f5093fe9de 100644 (file)
@@ -22,7 +22,16 @@ parseString = do char '"'
                  x <- many innerChar
                  char '"'
                  return $ String x
                  x <- many innerChar
                  char '"'
                  return $ String x
-              where innerChar = noneOf "\""
+              where innerChar = noneOf ['\\', '\"'] <|> escapeChar
+                    escapeChar = do char '\\'
+                                    c <- oneOf ['\"', '\\', 'n', 'r', 't', 'f']
+                                    return $ case c of
+                                                '\"' -> '\"'
+                                                '\\' -> '\\'
+                                                'n'  -> '\n'
+                                                'r'  -> '\r'
+                                                't'  -> '\t'
+                                                'f'  -> '\f'
 
 parseAtom :: Parser LispVal
 parseAtom = do
 
 parseAtom :: Parser LispVal
 parseAtom = do