summaryrefslogtreecommitdiff
path: root/src/modules/lexer/lexer.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/lexer/lexer.scm')
-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)))