First version, c++.
#ifndef _JSONSAX_HPP_
#define _JSONSAX_HPP_
class IJSLXBackend
{
public:
virtual bool Eof() = 0;
virtual char GetChar() = 0;
virtual bool OnStartObject()
{
return true;
}
virtual bool OnStopObject()
{
return true;
}
virtual bool OnStartArray()
{
return true;
}
virtual bool OnStopArray()
{
return true;
}
virtual bool OnStartNumber()
{
return true;
}
virtual bool OnStopNumber()
{
return true;
}
virtual bool OnStartString()
{
return true;
}
virtual bool OnStopString()
{
return true;
}
virtual bool OnNull()
{
return true;
}
virtual bool OnTrue()
{
return true;
}
virtual bool OnFalse()
{
return true;
}
virtual void OnError(const char* err)
{
(void)err;
}
};
class JSLXParser
{
public:
JSLXParser(IJSLXBackend* pBackend);
bool Parse();
protected:
bool _GetNextChar();
bool TrimWhiteSpace();
bool GetNextChar(bool trim = true);
bool ParseValue();
bool ParseObject();
bool ParsePair();
bool ParseArray();
bool ParseString();
bool ParseNumber();
bool ParseNull();
bool ParseTrue();
bool ParseFalse();
bool ParseConstant(const char* constant);
private:
IJSLXBackend* m_pBackend;
char m_lastChar;
};
#endif