aboutsummaryrefslogtreecommitdiff
path: root/src/luax/tokens.rs
diff options
context:
space:
mode:
authorStanisław Zagórowski <hasohasacz@gmail.com>2024-01-11 02:20:44 +0100
committerStanisław Zagórowski <hasohasacz@gmail.com>2024-01-11 02:20:44 +0100
commit343bcfdfaaba32b7a46e1a945a4538e72d166ea8 (patch)
treeed27311160054515b6375a9f92e092772300ee65 /src/luax/tokens.rs
huh whuh
Diffstat (limited to 'src/luax/tokens.rs')
-rw-r--r--src/luax/tokens.rs147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/luax/tokens.rs b/src/luax/tokens.rs
new file mode 100644
index 0000000..9f1058a
--- /dev/null
+++ b/src/luax/tokens.rs
@@ -0,0 +1,147 @@
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub enum StringType {
+ Single,
+ Double,
+ DoubleBracket,
+}
+
+#[derive(Debug, Clone, Copy, PartialEq)]
+pub enum Token<'s> {
+ /// Keywords
+ Break,
+ Goto,
+ Do,
+ End,
+ While,
+ Repeat,
+ Until,
+ If,
+ Then,
+ ElseIf,
+ Else,
+ For,
+ In,
+ Function,
+ Local,
+ Return,
+ True,
+ False,
+ Nil,
+ /// Symbols
+ Semicolon,
+ Eq,
+ Comma,
+ ColonColon,
+ Dot,
+ Colon,
+ OpenBracket,
+ CloseBracket,
+ DotDotDot,
+ OpenParen,
+ CloseParen,
+ OpenBrace,
+ CloseBrace,
+ /// Operators
+ Plus,
+ Minus,
+ Star,
+ Slash,
+ SlashSlash,
+ Hat,
+ Percent,
+ Amp,
+ Tilde,
+ Pipe,
+ LtLt,
+ GtGt,
+ DotDot,
+ Lt,
+ Le,
+ Gt,
+ Ge,
+ EqEq,
+ TildeEq,
+ And,
+ Or,
+ Hash,
+ Not,
+ /// Containers
+ Number(f64),
+ String(&'s str, StringType),
+ Identifier(&'s str),
+
+ Dollar,
+ Eof,
+}
+
+impl std::fmt::Display for Token<'_> {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ match self {
+ Token::Break => write!(f, "break"),
+ Token::Goto => write!(f, "goto"),
+ Token::Do => write!(f, "do"),
+ Token::End => write!(f, "end"),
+ Token::While => write!(f, "while"),
+ Token::Repeat => write!(f, "repeat"),
+ Token::Until => write!(f, "until"),
+ Token::If => write!(f, "if"),
+ Token::Then => write!(f, "then"),
+ Token::ElseIf => write!(f, "elseif"),
+ Token::Else => write!(f, "else"),
+ Token::For => write!(f, "for"),
+ Token::In => write!(f, "in"),
+ Token::Function => write!(f, "function"),
+ Token::Local => write!(f, "local"),
+ Token::Return => write!(f, "return"),
+ Token::True => write!(f, "true"),
+ Token::False => write!(f, "false"),
+ Token::Nil => write!(f, "nil"),
+ Token::Semicolon => write!(f, ";"),
+ Token::Eq => write!(f, "="),
+ Token::Comma => write!(f, ","),
+ Token::ColonColon => write!(f, "::"),
+ Token::Dot => write!(f, "."),
+ Token::Colon => write!(f, ":"),
+ Token::OpenBracket => write!(f, "["),
+ Token::CloseBracket => write!(f, "]"),
+ Token::DotDotDot => write!(f, "..."),
+ Token::OpenParen => write!(f, "("),
+ Token::CloseParen => write!(f, ")"),
+ Token::OpenBrace => write!(f, "{{"),
+ Token::CloseBrace => write!(f, "}}"),
+ Token::Plus => write!(f, "+"),
+ Token::Minus => write!(f, "-"),
+ Token::Star => write!(f, "*"),
+ Token::Slash => write!(f, "/"),
+ Token::SlashSlash => write!(f, "//"),
+ Token::Hat => write!(f, "^"),
+ Token::Percent => write!(f, "%"),
+ Token::Amp => write!(f, "&"),
+ Token::Tilde => write!(f, "~"),
+ Token::Pipe => write!(f, "|"),
+ Token::LtLt => write!(f, "<<"),
+ Token::GtGt => write!(f, ">>"),
+ Token::DotDot => write!(f, ".."),
+ Token::Lt => write!(f, "<"),
+ Token::Le => write!(f, "<="),
+ Token::Gt => write!(f, ">"),
+ Token::Ge => write!(f, ">="),
+ Token::EqEq => write!(f, "=="),
+ Token::TildeEq => write!(f, "~="),
+ Token::And => write!(f, "and"),
+ Token::Or => write!(f, "or"),
+ Token::Hash => write!(f, "#"),
+ Token::Not => write!(f, "not"),
+ Token::Number(n) => write!(f, "{}", n),
+ Token::String(s, st) => match st {
+ StringType::Single => write!(f, "'{}'", s),
+ StringType::Double => write!(f, "\"{}\"", s),
+ StringType::DoubleBracket => write!(f, "[[{}]]", s),
+ },
+ Token::Identifier(s) => write!(f, "{}", s),
+ Token::Dollar => write!(f, "$"),
+
+ Token::Eof => write!(f, "EOF"),
+ }
+ }
+}