aboutsummaryrefslogtreecommitdiff
path: root/src/lex
diff options
context:
space:
mode:
Diffstat (limited to 'src/lex')
-rw-r--r--src/lex/token.rs60
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"),
+ }
+ }
+}