diff options
Diffstat (limited to 'src/lex')
| -rw-r--r-- | src/lex/token.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/lex/token.rs b/src/lex/token.rs index f3dafa7..9d6ded0 100644 --- a/src/lex/token.rs +++ b/src/lex/token.rs @@ -1,3 +1,5 @@ +use std::fmt::{write, Display}; + #[derive(Clone, Copy, Debug)] pub struct Location { pub col: usize, @@ -81,3 +83,61 @@ pub enum TokenKind { Unknown(char), Eof, } + +impl Display for TokenKind { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + TokenKind::OpPlus => write!(f, "+"), + TokenKind::OpMinus => write!(f, "-"), + TokenKind::OpStar => write!(f, "*"), + TokenKind::OpSlash => write!(f, "/"), + TokenKind::OpEq => write!(f, "=="), + TokenKind::OpNot => write!(f, "!"), + TokenKind::OpNeq => write!(f, "!="), + TokenKind::OpLt => write!(f, "<"), + TokenKind::OpGt => write!(f, ">"), + TokenKind::OpLte => write!(f, "<="), + TokenKind::OpGte => write!(f, ">="), + TokenKind::OpAnd => write!(f, "&&"), + TokenKind::OpOr => write!(f, "||"), + TokenKind::Dot => write!(f, "."), + TokenKind::Comma => write!(f, ","), + TokenKind::Colon => write!(f, ":"), + TokenKind::SemiColon => write!(f, ";"), + TokenKind::Assign => write!(f, "="), + TokenKind::ConstAssign => write!(f, ":="), + TokenKind::Arrow => write!(f, "->"), + TokenKind::GroupOpen => write!(f, "("), + TokenKind::GroupClose => write!(f, ")"), + // {{ Escapes a single { + TokenKind::BlockOpen => write!(f, "{{"), + TokenKind::BlockClose => write!(f, "}}"), + TokenKind::ArrayOpen => write!(f, "["), + TokenKind::ArrayClose => write!(f, "]"), + TokenKind::Int(v) => write!(f, "{}", v), + TokenKind::Float(v) => write!(f, "{}", v), + // These are a bit weird, because they aren't direct mappi + TokenKind::Str(v) => write!(f, "\"{}\"", v), + TokenKind::StrOpen => write!(f, "\""), + TokenKind::StrClose => write!(f, "\""), + TokenKind::StrEmbed(v) => write!(f, "{{{}}}", v), + TokenKind::Ident(v) => write!(f, "{}", v), + TokenKind::KeywordFn => write!(f, "fn"), + TokenKind::KeywordIf => write!(f, "if"), + TokenKind::KeywordElif => write!(f, "elif"), + TokenKind::KeywordElse => write!(f, "else"), + TokenKind::KeywordLoop => write!(f, "loop"), + TokenKind::KeywordForm => write!(f, "form"), + TokenKind::KeywordType => write!(f, "type"), + TokenKind::KeywordTrue => write!(f, "true"), + TokenKind::KeywordFalse => write!(f, "false"), + TokenKind::KeywordSelf => write!(f, "self"), + TokenKind::KeywordBreak => write!(f, "break"), + TokenKind::KeywordContinue => write!(f, "continue"), + TokenKind::KeywordReturn => write!(f, "return"), + TokenKind::KeywordPrint => write!(f, "print"), + TokenKind::Unknown(v) => write!(f, "{}", v), + TokenKind::Eof => write!(f, "end of file"), + } + } +} |
