00001 #pragma once 00002 00003 #ifndef PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 00004 #define PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 00005 00006 00007 #include "node.h" 00008 #include "noncopyable.h" 00009 #include <ios> 00010 #include <string> 00011 #include <vector> 00012 #include <map> 00013 #include <memory> 00014 00015 namespace YAML 00016 { 00017 class Scanner; 00018 struct ParserState; 00019 struct Token; 00020 00021 class Parser: private noncopyable 00022 { 00023 public: 00024 Parser(); 00025 Parser(std::istream& in); 00026 ~Parser(); 00027 00028 operator bool() const; 00029 00030 void Load(std::istream& in); 00031 bool GetNextDocument(Node& document); 00032 void PrintTokens(std::ostream& out); 00033 00034 private: 00035 void ParseDirectives(); 00036 void HandleDirective(const Token& token); 00037 void HandleYamlDirective(const Token& token); 00038 void HandleTagDirective(const Token& token); 00039 00040 private: 00041 std::auto_ptr<Scanner> m_pScanner; 00042 std::auto_ptr<ParserState> m_pState; 00043 }; 00044 } 00045 00046 #endif // PARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66