1 module ctpg.dsl.typed.token; 2 3 import std.conv : to; 4 5 enum TokenType 6 { 7 UNDEFINED, 8 9 // 単一トークン 10 CONVERTER, 11 ID, 12 DOLLAR, 13 TEMPLATE_INSTANCE, 14 NONTERMINAL, 15 RANGE_ONE_CHAR, 16 RANGE_CHAR_RANGE, 17 RANGE, 18 STRING, 19 20 // 再帰的なトークン 21 EXCLAM, 22 ANPERSAND, 23 ASCIICIRCUM, 24 ASTERISK, 25 PLUS, 26 QUESTION, 27 SEQUENCE, 28 LEFT_SHIFT, 29 LEFT_QUESTION, 30 SLASH, 31 DEFINITION, 32 DEFINITIONS, 33 34 // 構文定義内で使える@トークン 35 SKIP,// SET_SKIPで指定されたスキップパーサでスキップする 36 SKIP_WITH, // これ自身が指定したスキップパーサでスキップする 37 SET_SKIP, // スキップパーサを設定する 38 MEMOIZE, // メモ化する 39 40 SKIP_LITERAL_TRUE, 41 SKIP_LITERAL_FALSE, 42 MEMOIZE_SKIP_TRUE, 43 MEMOIZE_SKIP_FALSE, 44 MEMOIZE_LITERAL_TRUE, 45 MEMOIZE_LITERAL_FALSE, 46 MEMOIZE_NONTERMINAL_TRUE, 47 MEMOIZE_NONTERMINAL_FALSE, 48 49 // 構文定義外で使える@トークン 50 GLOBAL_SET_SKIP, 51 52 GLOBAL_SKIP_LITERAL_TRUE, 53 GLOBAL_SKIP_LITERAL_FALSE, 54 GLOBAL_MEMOIZE_SKIP_TRUE, 55 GLOBAL_MEMOIZE_SKIP_FALSE, 56 GLOBAL_MEMOIZE_LITERAL_TRUE, 57 GLOBAL_MEMOIZE_LITERAL_FALSE, 58 GLOBAL_MEMOIZE_NONTERMINAL_TRUE, 59 GLOBAL_MEMOIZE_NONTERMINAL_FALSE, 60 } 61 62 struct Token 63 { 64 TokenType type; 65 string text_; 66 67 string text() @property 68 { 69 return text_.length == 0 ? type.to!string() : text_; 70 } 71 72 void text(string text_) @property 73 { 74 this.text_ = text_; 75 } 76 }