Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-05-12 09:08:10

0001 #ifndef SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0002 #define SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0003 
0004 #if defined(_MSC_VER) ||                                            \
0005     (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
0006      (__GNUC__ >= 4))  // GCC supports "pragma once" correctly since 3.4
0007 #pragma once
0008 #endif
0009 
0010 #include <map>
0011 #include <memory>
0012 #include <string>
0013 
0014 #include "ATOOLS/YAML/yaml-cpp/anchor.h"
0015 
0016 namespace SHERPA_YAML {
0017 class CollectionStack;
0018 template <int> class DepthGuard; // depthguard.h
0019 class EventHandler;
0020 class Node;
0021 class Scanner;
0022 struct Directives;
0023 struct Mark;
0024 struct Token;
0025 
0026 class SingleDocParser {
0027  public:
0028   SingleDocParser(Scanner& scanner, const Directives& directives);
0029   SingleDocParser(const SingleDocParser&) = delete;
0030   SingleDocParser(SingleDocParser&&) = delete;
0031   SingleDocParser& operator=(const SingleDocParser&) = delete;
0032   SingleDocParser& operator=(SingleDocParser&&) = delete;
0033   ~SingleDocParser();
0034 
0035   void HandleDocument(EventHandler& eventHandler);
0036 
0037  private:
0038   void HandleNode(EventHandler& eventHandler);
0039 
0040   void HandleSequence(EventHandler& eventHandler);
0041   void HandleBlockSequence(EventHandler& eventHandler);
0042   void HandleFlowSequence(EventHandler& eventHandler);
0043 
0044   void HandleMap(EventHandler& eventHandler);
0045   void HandleBlockMap(EventHandler& eventHandler);
0046   void HandleFlowMap(EventHandler& eventHandler);
0047   void HandleCompactMap(EventHandler& eventHandler);
0048   void HandleCompactMapWithNoKey(EventHandler& eventHandler);
0049 
0050   void ParseProperties(std::string& tag, anchor_t& anchor,
0051                        std::string& anchor_name);
0052   void ParseTag(std::string& tag);
0053   void ParseAnchor(anchor_t& anchor, std::string& anchor_name);
0054 
0055   anchor_t RegisterAnchor(const std::string& name);
0056   anchor_t LookupAnchor(const Mark& mark, const std::string& name) const;
0057 
0058  private:
0059   int depth = 0;
0060   Scanner& m_scanner;
0061   const Directives& m_directives;
0062   std::unique_ptr<CollectionStack> m_pCollectionStack;
0063 
0064   using Anchors = std::map<std::string, anchor_t>;
0065   Anchors m_anchors;
0066 
0067   anchor_t m_curAnchor;
0068 };
0069 }  // namespace SHERPA_YAML
0070 
0071 #endif  // SINGLEDOCPARSER_H_62B23520_7C8E_11DE_8A39_0800200C9A66