1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
pub mod token;
pub mod token_line;

/// Token type.  

/// トークンの種類。  

#[derive(Clone, Copy, Debug)]
pub enum TokenType {
    /// Alphabet character. A ~ Z, a ~ z.  1 disit.  

    AbChar,
    /// \  

    Backslash,
    /// }  

    CloseCurlyBracket,
    /// :  

    Colon,
    /// ,  

    Comma,
    /// .  

    Dot,
    /// "  

    DoubleQuotation,
    EndOfLine,
    /// =  

    Equals,
    /// -  

    Hyphen,
    /// {  

    LeftCurlyBracket,
    /// [  

    LeftSquareBracket,
    /// Numeral character. 0 ~ 9. 1 disit.  

    NumChar,
    /// +  

    Plus,
    /// }  

    RightCurlyBracket,
    /// ]  

    RightSquareBracket,
    /// #  

    Sharp,
    /// '  

    SingleQuotation,
    /// A ~ Z, a ~ z.  Multiple disits.   

    /// 構文解析の結果。文字列トークン。  

    SPAlphabetString,
    SPDateTimeString,
    /// Syntax parser result.  

    /// Positional numeral system string.  

    /// Binary, Octal, Decimal, Hexadecimal...  

    /// 構文解析の結果。  

    /// 進数文字列。  

    /// `0x01aB23Cd` なら、 `01aB23Cd` の部分。  

    SPPositionalNumeralString,
    /// _  

    Underscore,
    /// Multi-byte character or more.  

    /// 全角文字などいろいろ。  

    Unknown,
    /// Whitespace means tab ('\t' 0x09) or space (' ' 0x20). Multiple digits.  

    /// ホワイトスペースは タブ ('\t', 0x09) と 半角スペース (' ' 0x20) です。 複数桁です。  

    WhiteSpaceString,
}

/// A row of tokens.  

/// 一列のトークン。  

pub struct TokenLine {
    pub row_number: usize,
    pub tokens: Vec<Token>,
}

/// Token.  

/// 字句。  

#[derive(Clone)]
pub struct Token {
    pub column_number: usize,
    pub value: String,
    pub type_: TokenType,
}