summaryrefslogtreecommitdiff
path: root/src/modules/lexer
diff options
context:
space:
mode:
authorbd <bdunaisky@umass.edu>2024-11-04 23:34:54 -0500
committerbd <bdunaisky@umass.edu>2024-11-04 23:34:54 -0500
commitfdcf4be12c7c8913ccd26ebcab7cb05eb2abaa48 (patch)
treea09fe6542daab2aa92ad28ced3e7b87d7531021d /src/modules/lexer
parenteb660323ad8232978f98740634699e1363ca57bf (diff)
Add keywords to lexer
Diffstat (limited to 'src/modules/lexer')
-rw-r--r--src/modules/lexer/lexer.scm12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/modules/lexer/lexer.scm b/src/modules/lexer/lexer.scm
index e07ab67..dae7107 100644
--- a/src/modules/lexer/lexer.scm
+++ b/src/modules/lexer/lexer.scm
@@ -30,7 +30,7 @@ current input port."
'semi-colon)
((char-alphabetic? chr)
- (read-identifier chr))
+ (lookup-keyword (read-identifier chr)))
((char-numeric? chr)
(read-constant chr))
@@ -57,3 +57,13 @@ current input port."
(read-identifier-helper (cons (read-char) chrs-so-far)))
(#t (reverse chrs-so-far)))))
(list->string (read-identifier-helper (list chr))))
+
+(define (lookup-keyword id)
+ "Given identifier ID, converts it to a keyword
+if one is known."
+ (let ((found (assoc
+ id
+ '(("int" . int)
+ ("void" . void)
+ ("return" . return)))))
+ (if found (cdr found) id)))