48 lines
722 B
Rust
48 lines
722 B
Rust
// lexer/token.rs
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
pub enum TokenKind {
|
|
// 单字符
|
|
LeftParen, RightParen,
|
|
LeftBrace, RightBrace,
|
|
LeftBracket, RightBracket,
|
|
Comma, Semicolon, Dot,
|
|
Colon,
|
|
|
|
// 运算符
|
|
Plus, Minus, Star, Slash,
|
|
Bang,
|
|
Equal,
|
|
Greater, GreaterEqual,
|
|
Less, LessEqual,
|
|
EqualEqual, BangEqual,
|
|
AndAnd, OrOr,
|
|
|
|
// 字面量
|
|
Identifier(String),
|
|
Number(f64),
|
|
String(String),
|
|
|
|
// 关键字
|
|
Let,
|
|
Fn,
|
|
If,
|
|
Else,
|
|
While,
|
|
For,
|
|
Break,
|
|
Continue,
|
|
Return,
|
|
True,
|
|
False,
|
|
Nil,
|
|
|
|
EOF,
|
|
}
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct Token {
|
|
pub kind: TokenKind,
|
|
pub line: usize,
|
|
pub column: usize,
|
|
}
|