Skip to main content

oak_dot/parser/
element_type.rs

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