File indexing completed on 2025-05-12 09:08:10
0001 #ifndef TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0002 #define TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0003
0004 #if defined(_MSC_VER) || \
0005 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
0006 (__GNUC__ >= 4))
0007 #pragma once
0008 #endif
0009
0010 #include "ATOOLS/YAML/yaml-cpp/mark.h"
0011 #include <iostream>
0012 #include <string>
0013 #include <vector>
0014
0015 namespace SHERPA_YAML {
0016 const std::string TokenNames[] = {
0017 "DIRECTIVE", "DOC_START", "DOC_END", "BLOCK_SEQ_START",
0018 "BLOCK_MAP_START", "BLOCK_SEQ_END", "BLOCK_MAP_END", "BLOCK_ENTRY",
0019 "FLOW_SEQ_START", "FLOW_MAP_START", "FLOW_SEQ_END", "FLOW_MAP_END",
0020 "FLOW_MAP_COMPACT", "FLOW_ENTRY", "KEY", "VALUE",
0021 "ANCHOR", "ALIAS", "TAG", "SCALAR"};
0022
0023 struct Token {
0024
0025 enum STATUS { VALID, INVALID, UNVERIFIED };
0026 enum TYPE {
0027 DIRECTIVE,
0028 DOC_START,
0029 DOC_END,
0030 BLOCK_SEQ_START,
0031 BLOCK_MAP_START,
0032 BLOCK_SEQ_END,
0033 BLOCK_MAP_END,
0034 BLOCK_ENTRY,
0035 FLOW_SEQ_START,
0036 FLOW_MAP_START,
0037 FLOW_SEQ_END,
0038 FLOW_MAP_END,
0039 FLOW_MAP_COMPACT,
0040 FLOW_ENTRY,
0041 KEY,
0042 VALUE,
0043 ANCHOR,
0044 ALIAS,
0045 TAG,
0046 PLAIN_SCALAR,
0047 NON_PLAIN_SCALAR
0048 };
0049
0050
0051 Token(TYPE type_, const Mark& mark_)
0052 : status(VALID), type(type_), mark(mark_), value{}, params{}, data(0) {}
0053
0054 friend std::ostream& operator<<(std::ostream& out, const Token& token) {
0055 out << TokenNames[token.type] << std::string(": ") << token.value;
0056 for (const std::string& param : token.params)
0057 out << std::string(" ") << param;
0058 return out;
0059 }
0060
0061 STATUS status;
0062 TYPE type;
0063 Mark mark;
0064 std::string value;
0065 std::vector<std::string> params;
0066 int data;
0067 };
0068 }
0069
0070 #endif