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
pub mod token;
pub mod token_line;

/// Token type.  

/// トークンの種類。  

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

    Alphabet,
    /// \  

    Backslash,
    /// }  

    CloseCurlyBracket,
    /// :  

    Colon,
    /// ,  

    Comma,
    /// .  

    Dot,
    /// "  

    DoubleQuotation,
    EndOfLine,
    /// =  

    Equals,
    /// -  

    Hyphen,
    /// {  

    LeftCurlyBracket,
    /// [  

    LeftSquareBracket,
    /// 0 ~ 9.  

    Numeral,
    /// +  

    Plus,
    /// }  

    RightCurlyBracket,
    /// ]  

    RightSquareBracket,
    /// #  

    Sharp,
    /// '  

    SingleQuotation,
    /// _  

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

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

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

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

    WhiteSpace,
}

/// 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,
}