summaryrefslogtreecommitdiff
path: root/token
diff options
context:
space:
mode:
authorIbrahim Muftee <ibrahim@muftee.net>2026-07-20 18:44:45 -0500
committerIbrahim Muftee <ibrahim@muftee.net>2026-07-23 20:38:35 -0500
commite5ab0622364911a8a7364689d3b59e856a6c09e9 (patch)
treeaac69f2f2da06cadf786c12494ed9d27eef0136b /token
parenta84bf3b30c9cc3b2b5eeea542855a56915e26099 (diff)
chapter 2.6
Diffstat (limited to 'token')
-rw-r--r--token/token.odin62
1 files changed, 62 insertions, 0 deletions
diff --git a/token/token.odin b/token/token.odin
index 20efd6f..f6d0701 100644
--- a/token/token.odin
+++ b/token/token.odin
@@ -1,5 +1,7 @@
package token
+import "core:fmt"
+
Token :: union {
Asterisk,
Bang,
@@ -82,3 +84,63 @@ lookup_identifier :: proc(ident: string) -> Token {
return Identifier{ident}
}
}
+
+literal :: proc(token: Token) -> (literal: string) {
+ switch t in token {
+ case Asterisk:
+ literal = "*"
+ case Bang:
+ literal = "!"
+ case Comma:
+ literal = ","
+ case EOF:
+ literal = "EOF"
+ case Else:
+ literal = "else"
+ case Equal_Sign:
+ literal = "="
+ case Equals:
+ literal = "=="
+ case False:
+ literal = "false"
+ case Forward_Slash:
+ literal = "/"
+ case Function:
+ literal = "fn"
+ case Greater_Than:
+ literal = ">"
+ case Identifier:
+ literal = t.literal
+ case If:
+ literal = "if"
+ case Illegal:
+ literal = "ILLEGAL"
+ case Integer:
+ literal = fmt.tprint(t.literal)
+ case Left_Brace:
+ literal = "{"
+ case Left_Parenthesis:
+ literal = "("
+ case Less_Than:
+ literal = "<"
+ case Let:
+ literal = "let"
+ case Minus:
+ literal = "-"
+ case Not_Equals:
+ literal = "!="
+ case Plus:
+ literal = "+"
+ case Return:
+ literal = "return"
+ case Right_Brace:
+ literal = "}"
+ case Right_Parenthesis:
+ literal = ")"
+ case Semicolon:
+ literal = ";"
+ case True:
+ literal = "true"
+ }
+ return literal
+}