Skip to main content

oak_dot/lexer/
token_type.rs

1use oak_core::{Source, Token, TokenType, UniversalElementRole, UniversalTokenRole};
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5pub type DotToken = Token<DotTokenType>;
6
7impl TokenType for DotTokenType {
8    type Role = UniversalTokenRole;
9    const END_OF_STREAM: Self = Self::Error;
10
11    fn is_ignored(&self) -> bool {
12        false
13    }
14
15    fn role(&self) -> Self::Role {
16        match self {
17            _ => UniversalTokenRole::None,
18        }
19    }
20}
21
22#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
23#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
24#[repr(u8)]
25pub enum DotTokenType {
26    // 基本 kind
27    Identifier,
28    String,
29    Number,
30    Whitespace,
31    Newline,
32
33    // DOT 关键字
34    Graph,
35    Digraph,
36    Subgraph,
37    Node,
38    Edge,
39    Strict,
40
41    // 操作符
42    Arrow,     // ->
43    Line,      // --
44    Equal,     // =
45    Semicolon, // ;
46    Comma,     // ,
47
48    // 分隔符
49    LeftBrace,    // {
50    RightBrace,   // }
51    LeftBracket,  // [
52    RightBracket, // ]
53    LeftParen,    // (
54    RightParen,   // )
55
56    // 注释
57    Comment,
58
59    // 特殊
60    Root,
61    Error,
62    Eof,
63}