summaryrefslogtreecommitdiff
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
parenteb660323ad8232978f98740634699e1363ca57bf (diff)
Add keywords to lexer
-rw-r--r--manifest.scm1
-rwxr-xr-xsrc/gscc8
-rw-r--r--src/modules/lexer/lexer.scm12
-rw-r--r--src/unit-tests/lexer/lexer-test.scm6
4 files changed, 22 insertions, 5 deletions
diff --git a/manifest.scm b/manifest.scm
index be6c84e..8d1b86e 100644
--- a/manifest.scm
+++ b/manifest.scm
@@ -1,5 +1,6 @@
(specifications->manifest
'(
"gcc-toolchain"
+ "guile"
"python"
))
diff --git a/src/gscc b/src/gscc
index 8914016..82ed649 100755
--- a/src/gscc
+++ b/src/gscc
@@ -33,9 +33,11 @@ file on a success."
(define (process file parse? assemble?)
"Driver for lexing, parsing, and assembly generation."
- (let ((port (open-input-file file)))
- (set-current-input-port port)
- (read-tokens)
+ (let* ((port (open-input-file file))
+ (tokens (begin (set-current-input-port port)
+ (read-tokens))))
+ ;; (when parse?
+ ;; )
(close-input-port port)))
(define (postprocess file dest)
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)))
diff --git a/src/unit-tests/lexer/lexer-test.scm b/src/unit-tests/lexer/lexer-test.scm
index eb41b83..48291b9 100644
--- a/src/unit-tests/lexer/lexer-test.scm
+++ b/src/unit-tests/lexer/lexer-test.scm
@@ -65,8 +65,12 @@
(test-error (read-this "1foo")
(read-tokens))
+(test-equal (read-this "void")
+ '(void)
+ (read-tokens))
+
(test-equal (read-this "int main(void) {return 2;}")
- '("int" "main" left-paren "void" right-paren open-brace "return" 2 semi-colon close-brace)
+ '(int "main" left-paren void right-paren open-brace return 2 semi-colon close-brace)
(read-tokens))