lab09: impl parsing

This commit is contained in:
2026-03-08 22:08:34 -07:00
parent 9662155716
commit 32760466db

View File

@@ -12,7 +12,7 @@ data JValue = JString String
jsonFile :: GenParser Char st JValue jsonFile :: GenParser Char st JValue
jsonFile = do jsonFile = do
result <- jsonArr result <- jsonArr <|> jsonObj
spaces spaces
eof eof
return result return result
@@ -28,6 +28,8 @@ jsonElem' = jsonArr
<|> jsonString <|> jsonString
<|> jsonBool <|> jsonBool
<|> jsonNull <|> jsonNull
<|> jsonInt
<|> jsonObj
<?> "json element" <?> "json element"
jsonString :: GenParser Char st JValue jsonString :: GenParser Char st JValue
@@ -61,7 +63,22 @@ jsonArr = do
char ']' char ']'
return $ JArray arr return $ JArray arr
jsonInt = do
i <- many1 digit
return $ JNumber (read i :: Double)
jsonObj = do
char '{'
members <- jsonMember `sepBy` (char ',')
char '}'
return $ JObject members
jsonMember = do
spaces
key <- many $ noneOf ":"
char ':'
value <- jsonElem
return (key, value)
parseJSON :: String -> Either ParseError JValue parseJSON :: String -> Either ParseError JValue
parseJSON input = parse jsonFile "(unknown)" input parseJSON input = parse jsonFile "(unknown)" input