about summary refs log tree commit diff
path: root/src/lex/token.rs
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2021-11-21 19:44:47 +0100
committerMel <einebeere@gmail.com>2021-11-21 19:44:47 +0100
commit4e9d846fbd51cec9e8d931c4aa3f399668ac316e (patch)
treecda2e8645662b6c083add5ac87a279381eec054f /src/lex/token.rs
parentabaa72af8a1be00f3f84d7771a7994bfbbccf719 (diff)
downloadrabbithole-4e9d846fbd51cec9e8d931c4aa3f399668ac316e.tar.zst
rabbithole-4e9d846fbd51cec9e8d931c4aa3f399668ac316e.zip
Basic errors for parsing.
Diffstat (limited to 'src/lex/token.rs')
-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"),
+        }
+    }
+}