Exercises 3
This commit is contained in:
parent
7e377e2a32
commit
8f3af55a4e
1 changed files with 9 additions and 6 deletions
15
y.hs
15
y.hs
|
@ -21,14 +21,17 @@ spaces = skipMany1 space
|
||||||
parseString :: Parser LispVal
|
parseString :: Parser LispVal
|
||||||
parseString = do
|
parseString = do
|
||||||
char '"'
|
char '"'
|
||||||
x <- many ( (char '\\' >> char 'n' >> return '\n')
|
x <- many $ strSpecialChar <|> noneOf "\""
|
||||||
<|> (char '\\' >> char 'r' >> return '\r')
|
|
||||||
<|> (char '\\' >> char 't' >> return '\t')
|
|
||||||
<|> (char '\\' >> anyChar)
|
|
||||||
<|> noneOf "\""
|
|
||||||
)
|
|
||||||
char '"'
|
char '"'
|
||||||
return $ String x
|
return $ String x
|
||||||
|
where
|
||||||
|
strSpecialChar = char '\\' >> do
|
||||||
|
x <- anyChar
|
||||||
|
case x of
|
||||||
|
'n' -> return '\n'
|
||||||
|
't' -> return '\t'
|
||||||
|
'r' -> return '\r'
|
||||||
|
_ -> return x
|
||||||
|
|
||||||
parseAtom :: Parser LispVal
|
parseAtom :: Parser LispVal
|
||||||
parseAtom = do
|
parseAtom = do
|
||||||
|
|
Loading…
Reference in a new issue