mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-04 22:11:26 +12:00
Will be completely wiped, I think, in favor of a Scanner (to tokens), then Parser mechanism.
55 lines
979 B
C++
55 lines
979 B
C++
#pragma once
|
|
|
|
#include <ios>
|
|
#include <string>
|
|
#include <stack>
|
|
|
|
namespace YAML
|
|
{
|
|
class Node;
|
|
|
|
const std::string DocStart = "---";
|
|
const std::string DocEnd = "...";
|
|
|
|
const char SeqToken = '-';
|
|
|
|
enum CONTEXT { C_BLOCK, C_FLOW };
|
|
|
|
class Parser
|
|
{
|
|
public:
|
|
struct State
|
|
{
|
|
State(CONTEXT context_, int indent_, bool startingNewLine_)
|
|
: context(context_), indent(indent_), startingNewLine(startingNewLine_) {}
|
|
|
|
CONTEXT context;
|
|
int indent;
|
|
bool startingNewLine;
|
|
};
|
|
|
|
public:
|
|
Parser(std::istream& in);
|
|
~Parser();
|
|
|
|
operator bool () const;
|
|
bool operator !() const;
|
|
|
|
// parse helpers
|
|
static bool IsWhitespace(char ch);
|
|
void Putback(const std::string& str);
|
|
void StripWhitespace(int n = -1);
|
|
int GetNumOfSpaces();
|
|
bool SeqContinues();
|
|
|
|
// readers
|
|
Node *ReadNextNode();
|
|
std::string ReadNextToken();
|
|
|
|
private:
|
|
bool m_ok;
|
|
|
|
std::istream& INPUT;
|
|
std::stack <State> m_state;
|
|
};
|
|
}
|