121 lines
2.7 KiB
Rust
121 lines
2.7 KiB
Rust
#[derive(Debug, PartialEq)]
|
|
pub struct Token {
|
|
/// The type of the token
|
|
pub token_type: TokenType,
|
|
/// The line where the token was found
|
|
pub line: usize,
|
|
/// The column where the token was found
|
|
pub column: usize,
|
|
}
|
|
|
|
impl Token {
|
|
pub fn new(token_type: TokenType, line: usize, column: usize) -> Self {
|
|
Self {
|
|
token_type,
|
|
line,
|
|
column,
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Hash, Eq)]
|
|
pub enum TokenType {
|
|
/// Represents a string token
|
|
String(String),
|
|
/// Represents a number token
|
|
Number(Number),
|
|
/// Represents a boolean token
|
|
Boolean(bool),
|
|
/// Represents a keyword token
|
|
Keyword(Keyword),
|
|
/// Represents an identifier token
|
|
Identifier(String),
|
|
/// Represents a symbol token
|
|
Symbol(Symbol),
|
|
/// Represents an end of file token
|
|
EOF,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Hash, Eq)]
|
|
pub enum Number {
|
|
/// Represents an integer number
|
|
Integer(u64),
|
|
/// Represents a decimal type number with a precision of 64 bits
|
|
Decimal(u64, u64),
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Hash, Eq)]
|
|
pub enum Symbol {
|
|
// Single Character Symbols
|
|
/// Represents the `(` symbol
|
|
LParen,
|
|
/// Represents the `)` symbol
|
|
RParen,
|
|
/// Represents the `{` symbol
|
|
LBrace,
|
|
/// Represents the `}` symbol
|
|
RBrace,
|
|
/// Represents the `[` symbol
|
|
LBracket,
|
|
/// Represents the `]` symbol
|
|
RBracket,
|
|
/// Represents the `;` symbol
|
|
Semicolon,
|
|
/// Represents the `:` symbol
|
|
Colon,
|
|
/// Represents the `,` symbol
|
|
Comma,
|
|
/// Represents the `+` symbol
|
|
Plus,
|
|
/// Represents the `-` symbol
|
|
Minus,
|
|
/// Represents the `*` symbol
|
|
Asterisk,
|
|
/// Represents the `/` symbol
|
|
Slash,
|
|
/// Represents the `<` symbol
|
|
LessThan,
|
|
/// Represents the `>` symbol
|
|
GreaterThan,
|
|
/// Represents the `=` symbol
|
|
Assign,
|
|
/// Represents the `!` symbol
|
|
LogicalNot,
|
|
/// Represents the `.` symbol
|
|
Dot,
|
|
|
|
// Double Character Symbols
|
|
/// Represents the `==` symbol
|
|
Equal,
|
|
/// Represents the `!=` symbol
|
|
NotEqual,
|
|
/// Represents the `&&` Symbol
|
|
LogicalAnd,
|
|
// Represents the `||` Symbol
|
|
LogicalOr,
|
|
/// Represents the `<=` symbol
|
|
LessThanOrEqual,
|
|
/// Represents the `>=` symbol
|
|
GreaterThanOrEqual,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Hash, Eq)]
|
|
pub enum Keyword {
|
|
/// Represents the `let` keyword
|
|
Let,
|
|
/// Represents the `fn` keyword
|
|
Fn,
|
|
/// Represents the `if` keyword
|
|
If,
|
|
/// Represents the `else` keyword
|
|
Else,
|
|
/// Represents the `return` keyword
|
|
Return,
|
|
/// Represents the `enum` keyword
|
|
Enum,
|
|
/// Represents an import keyword
|
|
Import,
|
|
/// Represents an export keyword
|
|
Export,
|
|
}
|