diff options
Diffstat (limited to 'src/luax/tokens.rs')
| -rw-r--r-- | src/luax/tokens.rs | 147 |
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"), + } + } +} |
