private static LogicJSONNode ParseValue(CharStream stream) { stream.SkipWhitespace(); char charValue = stream.NextChar(); LogicJSONNode node = null; switch (charValue) { case '{': node = LogicJSONParser.ParseObject(stream); break; case '[': node = LogicJSONParser.ParseArray(stream); break; case 'n': node = LogicJSONParser.ParseNull(stream); break; case 'f': node = LogicJSONParser.ParseBoolean(stream); break; case 't': node = LogicJSONParser.ParseBoolean(stream); break; case '"': node = LogicJSONParser.ParseString(stream); break; case '-': node = LogicJSONParser.ParseNumber(stream); break; default: if (charValue >= '0' && charValue <= '9') { node = LogicJSONParser.ParseNumber(stream); } else { LogicJSONParser.ParseError("Not of any recognized value: " + charValue); } break; } return(node); }
private static LogicJSONObject ParseObject(CharStream stream) { stream.SkipWhitespace(); if (stream.Read() != '{') { LogicJSONParser.ParseError("Not an object"); return(null); } LogicJSONObject jsonObject = new LogicJSONObject(); stream.SkipWhitespace(); char nextChar = stream.NextChar(); if (nextChar != '\0') { if (nextChar == '}') { stream.Read(); return(jsonObject); } while (true) { LogicJSONString key = LogicJSONParser.ParseString(stream); if (key != null) { stream.SkipWhitespace(); nextChar = stream.Read(); if (nextChar != ':') { break; } LogicJSONNode node = LogicJSONParser.ParseValue(stream); if (node != null) { jsonObject.Put(key.GetStringValue(), node); stream.SkipWhitespace(); nextChar = stream.Read(); if (nextChar != ',') { if (nextChar == '}') { return(jsonObject); } break; } } else { break; } } else { break; } } } LogicJSONParser.ParseError("Not an object"); return(null); }